簡體   English   中英

如何將所有內容匹配到字符的第二次出現?

[英]How to match everything up to the second occurrence of a character?

所以我的字符串看起來像這樣:

Basic information, advanced information, super information, no information

我想捕獲直到第二個逗號的所有內容,所以我得到:

Basic information, advanced information

那將是什么正則表達式?

我試過: (.*,.*),但我明白了

Basic information, advanced information, super information,

這將捕獲但不包括第二個逗號:

[^,]*,[^,]*

英文翻譯:

  • [^,]* = 盡可能多的非逗號字符

  • , = 逗號

  • [^,]* = 盡可能多的非逗號字符

[...]是一個字符類。 [abc]表示“a 或 b 或 c”,而[^abc]表示除 a 或 b 或 c 之外的任何內容。

您可以嘗試^(.*?,.*?),問題是.*是貪婪的並且匹配最大數量的字符。 這 ? 后面 * 將行為更改為非貪婪。

您也可以在每個 .*? 周圍加上括號。 如果需要,可以單獨捕獲字符串。

我會采用 DRY 方法,如下所示:

^([^,]*,){1}[^,]*

這樣,您可以匹配所有內容,直到出現一個字符,而無需重復自己,除了最后一個模式。

盡管在原始海報的情況下,分組和分組的重復是沒有用的,我認為這將有助於其他需要匹配超過 2 次模式的人。

解釋:

  • ^從行首
  • ([^,]*,)創建一個匹配除逗號字符之外的所有內容的組,直到它遇到一個逗號。
  • {1}計算上述模式(您需要的次數)-1。 所以如果你需要 2 放 1,如果你需要 20 放 19。
  • [^,] * 最后一次重復該模式,不帶尾逗號。

試試這個方法:

(.*?,.*?),.*

鏈接到解決方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM