繁体   English   中英

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

[英]How to let regex know that it should stop after a first occurence?

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

第一次发生后有可能停止吗? 因此,第一个“:”。

您使用正则表达式获取简单子字符串的任何原因是什么?

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

通过使用更具体的正则表达式

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

您的.*:这样做

  1. .*贪婪地匹配所有内容,因此它一直运行到字符串的末尾。
  2. :尝试匹配,因此正则表达式引擎一次返回一个字符(称为回溯)以找到匹配项。 它在找到的第一个冒号处停止(从字符串末尾开始)

^[^:]*:这样做:

  1. ^将正则表达式锚定到字符串的开头。 字符串中间不会发生匹配。
  2. [^:]*贪婪地匹配除冒号以外的所有内容,因此它一直运行到第一个冒号
  3. :可以轻松匹配,因为下一个字符恰好是冒号。 完成。

不涉及回溯,这意味着它也更加有效。

使用此正则表达式.*?:Replace 重载

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM