如何让正则表达式知道它应该在第一次出现后停止?

时间:2010-05-20 13:52:54

标签: c# regex

string time = "Job started: donderdag 6 mei 2010 at 20:00:02"
var filterReg = new Regex(@".*:", RegexOptions.Compiled);
time = filterReg.Replace(time, String.Empty);

第一次出现后是否可以停止?所以在第一个“:”。

3 个答案:

答案 0 :(得分:3)

您是否使用正则表达式来获取简单的子字符串?

time = time.Substring(time.IndexOf(":") + 1);

答案 1 :(得分:1)

使用更具体的正则表达式

new Regex(@"^[^:]*:", RegexOptions.Compiled);

您的.*:执行此操作

  1. .*贪婪地匹配所有内容,因此它会一直运行到字符串的末尾。
  2. :尝试匹配,因此正则表达式引擎一次返回一个字符(这称为回溯)以查找匹配项。它停在它找到的第一个冒号(从字符串的末尾看)
  3. ^[^:]*:执行此操作:

    1. ^将正则表达式锚定到字符串的开头。字符串中间不会出现匹配。
    2. [^:]*匹配除了冒号之外的所有内容,贪婪,所以它直接运行到第一个冒号
    3. :可以轻松匹配,因为下一个字符恰好是冒号。完成。
    4. 不涉及回溯,这意味着它也更有效率。

答案 2 :(得分:0)

将此正则表达式.*?:Replace overload一起使用:

string time = "Job started: donderdag 6 mei 2010 at 20:00:02"
var filterReg = new Regex(@".*?:", RegexOptions.Compiled);
filterReg.Replace(time, String.Empty, 1);