c# - 获取 "-"之前所有字符的正则表达式

标签 c# .net regex

如何使用正则表达式获取字符"-"之前的字符串?

例如,我有"text-1",我想返回"text"

最佳答案

所以我看到了实现这一目标的许多可能性。

string text = "Foobar-test";
  1. 正则表达式匹配所有内容直到第一个“-”

    Match result = Regex.Match(text, @"^.*?(?=-)");
    
    • ^ 从字符串的开头开始匹配
    • .*? 匹配任何字符 (.),零次或多次 (*) 但尽可能少 ()
    • (?=-) 直到下一个字符是“-”(这是一个积极的展望)
  2. 正则表达式从字符串的开头匹配任何不是“-”的内容

    Match result2 = Regex.Match(text, @"^[^-]*");
    
    • [^-]* 匹配任何不是“-”的字符零次或多次
  3. 正则表达式匹配从字符串开头到“-”之间不是“-”的任何内容

    Match result21 = Regex.Match(text, @"^([^-]*)-");
    

    仅当字符串中有破折号时才会匹配,但结果会在捕获组 1 中找到。

  4. 拆分为“-”

    string[] result3 = text.Split('-');
    

    结果是一个数组,第一个“-”之前的部分是数组中的第一项

  5. 子串到第一个“-”

    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/

相关文章:

c# - 接管别人的代码

javascript - 使用javascript中的正则表达式从文本中过滤掉数字

c# - 如何将此 Parallel.ForEach 代码转换为异步/等待

c# - 分割成特定尺寸的件数

c# - 是否有一种 OCP 友好的方式来动态选择要访问 DbContext 中的哪个集合?

c# - 尝试引用对象数组内的多维对象数组中的元素

regex - 正则表达式匹配句子中括号内的单词

JavaScript RegEx 匹配 url 路径

c# - 当 bool 值改变时如何执行语句?

c# - (DbContext) SaveChanges() 如何用于大量记录? - 寻求和找到最佳性能的解决方案