如何使用正则表达式获取字符"-"
之前的字符串?
例如,我有"text-1"
,我想返回"text"
。
最佳答案
所以我看到了实现这一目标的许多可能性。
string text = "Foobar-test";
正则表达式匹配所有内容直到第一个“-”
Match result = Regex.Match(text, @"^.*?(?=-)");
^
从字符串的开头开始匹配.*?
匹配任何字符 (.
),零次或多次 (*
) 但尽可能少 (?
)(?=-)
直到下一个字符是“-”(这是一个积极的展望)
正则表达式从字符串的开头匹配任何不是“-”的内容
Match result2 = Regex.Match(text, @"^[^-]*");
[^-]*
匹配任何不是“-”的字符零次或多次
正则表达式匹配从字符串开头到“-”之间不是“-”的任何内容
Match result21 = Regex.Match(text, @"^([^-]*)-");
仅当字符串中有破折号时才会匹配,但结果会在捕获组 1 中找到。
拆分为“-”
string[] result3 = text.Split('-');
结果是一个数组,第一个“-”之前的部分是数组中的第一项
子串到第一个“-”
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 将返回完整的字符串。
关于c# - 获取 "-"之前所有字符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8224270/