簡體   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