正则表达式获取“ – ”之前的所有字符
如何使用正则表达式在字符"-"
之前获取字符串?
例如,我有"text-1"
,我想返回"text"
。
所以我看到很多可能实现这一目标。
string text = "Foobar-test";
1)正则表达式匹配所有内容直到第一个“ – ”
Match result = Regex.Match(text, @"^.*?(?=-)");
-
^
从字符串的开头匹配 -
.*?
匹配任何字符(.
),零次或多次(*
)但尽可能少(?
) -
(?=-)
直到下一个字符是“ – ”(这是一个积极的向前看)
2)正则表达式从字符串的开头匹配任何不是“ – ”的东西
Match result2 = Regex.Match(text, @"^[^-]*");
-
[^-]*
匹配任何不是“ – ”的字符零次或多次
2)1)正则表达式从字符串的开头匹配任何不是“ – ”的东西,直到“ – ”
Match result21 = Regex.Match(text, @"^([^-]*)-");
- 只有在字符串中有破折号时才会匹配,但结果会在捕获组1中找到。
3)拆分“ – ”
string[] result3 = text.Split('-');
- 结果是一个数组,第一个“ – ”之前的部分是数组中的第一个项目
4)子串直到第一个“ – ”
string result4 = text.Substring(0, text.IndexOf("-"));
- 从开头到第一次出现“ – ”(
text.IndexOf("-")
)从文本中获取子字符串
然后你得到所有的结果(都是一样的)
Console.WriteLine(result); Console.WriteLine(result2); Console.WriteLine(result21.Groups[1]); Console.WriteLine(result3[0]); Console.WriteLine(result4);
我更喜欢第一种方法。
当字符串中没有短划线时,您还需要考虑行为。 在这种情况下,第四种方法将引发exception,因为text.IndexOf("-")
将为-1
。 方法1和2.1将不返回任何内容,方法2和3将返回完整的字符串。
我不认为你需要正则表达式来实现这一目标。 我会看看SubString方法和indexOf方法。 如果您需要更多帮助,请添加评论,显示您尝试过的内容,我会提供更多帮助。
这是我的建议 – 它非常简单:
[^-]*
这类似于您需要的正则表达式:
([^-]*)-
JavaScript中的快速测试:
/([^-]*)-/.exec('text-1')[1] // 'text' /([^-]*)-/.exec('foo-bar-1')[1] // 'foo' /([^-]*)-/.exec('-1')[1] // '' /([^-]*)-/.exec('quux')[1] // explodes
您可以使用另一种基于非正则表达式的方法。 有人给出了使用Substring的建议,但你也可以使用Split:
string testString = "my-string"; string[] splitString = testString.Split("-"); string resultingString = splitString[0]; //my
有关另一个好例子,请参见http://msdn.microsoft.com/en-US/library/ms228388%28v=VS.80%29.aspx 。
如果你想在.NET中使用RegEx,
Regex rx = new Regex(@"^([\w]+)(\-)*"); var match = rx.Match("thisis-thefirst"); var text = match.Groups[1].Value; Assert.AreEqual("thisis", text);