regex 如何将所有内容匹配到字符的第二次出现?

vpfxa7rd  于 2023-05-01  发布在  其他
关注(0)|答案(4)|浏览(133)

所以我的字符串看起来像这样:

Basic information, advanced information, super information, no information

我想捕捉到第二个逗号的所有内容,所以我得到:

Basic information, advanced information

那么这个正则表达式是什么呢?
我试过:(.*,.*),,但我得到

Basic information, advanced information, super information,
gxwragnw

gxwragnw1#

这将捕获直到但不包括第二个逗号:

[^,]*,[^,]*

英语翻译:

  • [^,]* =尽可能多的非逗号字符
  • , =逗号
  • [^,]* =尽可能多的非逗号字符

[...]是一个字符类。[abc]表示“a或B或c”,[^abc]表示除a或b或c之外的任何东西。

tv6aics1

tv6aics12#

您可以尝试^(.*?,.*?),问题是.*是贪婪的,并且匹配最大数量的字符。?behind * 将行为改变为非贪婪。
你也可以在每一个的周围加上括号。* ?段来单独捕获字符串。

nfzehxib

nfzehxib3#

我会采取一种DRY方法,就像这样:

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

通过这种方式,您可以匹配所有内容,直到字符出现***n***次,而无需重复,除了最后一个模式。
虽然在原海报的情况下,组和重复的组是无用的我认为这将有助于其他需要匹配2倍以上的模式。
说明:


**([^,],)**创建一个组,匹配除逗号字符以外的所有字符,直到它遇到逗号。
*{1}统计上一个模式(需要的次数)-1。所以如果你需要2,就等于1,如果你需要20,就等于19。
***[^,]***最后一次重复该模式,不加逗号。

egmofgnx

egmofgnx4#

试试这个方法:

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

Link to the solution

相关问题