如何使用正则表达式在字符"-"
之前获取字符串?
例如,我有"text-1"
,我想返回"text"
。
答案 0 :(得分:79)
所以我看到很多可能实现这一目标。
string text = "Foobar-test";
1)正则表达式将所有内容匹配到第一个“ - ”
Match result = Regex.Match(text, @"^.*?(?=-)");
^
匹配字符串的开头.*?
匹配任何字符(.
),零次或多次(*
),但尽可能少(?
)(?=-)
直到下一个字符是“ - ”(这是一个积极的向前看)2)正则表达式从字符串的开头匹配任何不是“ - ”的内容
Match result2 = Regex.Match(text, @"^[^-]*");
[^-]*
匹配任何不是“ - ”零或更多次的字符2)1)正则表达式从字符串的开头匹配任何不是“ - ”的内容,直到“ - ”
Match result21 = Regex.Match(text, @"^([^-]*)-");
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);
我更喜欢第一种方法。
当字符串中没有短划线时,您还需要考虑行为。在这种情况下,第四种方法会抛出异常,因为text.IndexOf("-")
将是-1
。方法1和2.1将不返回任何内容,方法2和3将返回完整的字符串。
答案 1 :(得分:4)
答案 2 :(得分:4)
这是我的建议 - 它非常简单:
[^-]*
答案 3 :(得分:2)
这类似于您需要的正则表达式:
([^-]*)-
JavaScript中的快速测试:
/([^-]*)-/.exec('text-1')[1] // 'text'
/([^-]*)-/.exec('foo-bar-1')[1] // 'foo'
/([^-]*)-/.exec('-1')[1] // ''
/([^-]*)-/.exec('quux')[1] // explodes
答案 4 :(得分:2)
您可以使用另一种基于非正则表达式的方法。有人给出了使用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了解另一个好例子。
答案 5 :(得分:1)
如果你想在.NET中使用RegEx,
Regex rx = new Regex(@"^([\w]+)(\-)*");
var match = rx.Match("thisis-thefirst");
var text = match.Groups[1].Value;
Assert.AreEqual("thisis", text);
答案 6 :(得分:0)
查找所有单词和空格字符,直到-包括-
^[\w ]+-