ste*_*ema 90
所以我看到很多可能实现这一目标.
string text = "Foobar-test";
Run Code Online (Sandbox Code Playgroud)
1)正则表达式匹配所有内容直到第一个" - "
Match result = Regex.Match(text, @"^.*?(?=-)");
Run Code Online (Sandbox Code Playgroud)
^ 从字符串的开头匹配.*?匹配任何字符(.),零次或多次(*)但尽可能少(?)(?=-) 直到下一个字符是" - "(这是一个积极的向前看)2)正则表达式从字符串的开头匹配任何不是" - "的东西
Match result2 = Regex.Match(text, @"^[^-]*");
Run Code Online (Sandbox Code Playgroud)
[^-]* 匹配任何不是" - "的字符零次或多次2)1)正则表达式从字符串的开头匹配任何不是" - "的东西,直到" - "
Match result21 = Regex.Match(text, @"^([^-]*)-");
Run Code Online (Sandbox Code Playgroud)
3)拆分" - "
string[] result3 = text.Split('-');
Run Code Online (Sandbox Code Playgroud)
4)子串直到第一个" - "
string result4 = text.Substring(0, text.IndexOf("-"));
Run Code Online (Sandbox Code Playgroud)
text.IndexOf("-"))获取文本中的子字符串然后你得到所有的结果(都是一样的)
Console.WriteLine(result);
Console.WriteLine(result2);
Console.WriteLine(result21.Groups[1]);
Console.WriteLine(result3[0]);
Console.WriteLine(result4);
Run Code Online (Sandbox Code Playgroud)
我更喜欢第一种方法.
当字符串中没有短划线时,您还需要考虑行为.在这种情况下,第四种方法会抛出一个异常,因为它text.IndexOf("-")会-1.方法1和2.1将不返回任何内容,方法2和3将返回完整的字符串.
这类似于您需要的正则表达式:
([^-]*)-
Run Code Online (Sandbox Code Playgroud)
JavaScript 中的快速测试:
/([^-]*)-/.exec('text-1')[1] // 'text'
/([^-]*)-/.exec('foo-bar-1')[1] // 'foo'
/([^-]*)-/.exec('-1')[1] // ''
/([^-]*)-/.exec('quux')[1] // explodes
Run Code Online (Sandbox Code Playgroud)