如何将所有内容与第二次出现的角色相匹配?

Mic*_*cor 17 regex

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

Basic information, advanced information, super information, no information
Run Code Online (Sandbox Code Playgroud)

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

基本信息,高级信息

什么是正则表达式?

我试过了(.*,.*),但是我明白了

基本信息,高级信息,超级信息,

Lau*_*ves 26

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

[^,]*,[^,]*
Run Code Online (Sandbox Code Playgroud)

英文翻译:

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

  • , =逗号

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

[...]是一个角色类.[abc]表示"a或b或c",[^abc]表示除a或b或c之外的任何内容.


ska*_*fes 6

您可以尝试^(.*?,.*?), 问题是.*贪婪并且匹配最大字符数。?*后面的行为会将其更改为非贪婪。

您还可以在每个。*旁边加上括号。段,以根据需要分别捕获字符串。


Ang*_*115 5

我会采取 DRY 方法,如下所示:

^([^,]*,){1}[^,]*
Run Code Online (Sandbox Code Playgroud)

这样,您可以匹配所有内容,直到出现第n个字符,而无需重复自己(除了最后一个模式之外)。

虽然在原始海报的情况下,组和组的重复是没有用的,但我认为这将帮助其他需要匹配超过 2 次模式的人。

解释:

  • ^从该行的开头
  • ([^,]*,)创建一个匹配除逗号字符之外的所有内容的组,直到遇到逗号为止。
  • {1}计算之前的模式(您需要的次数)-1。因此,如果您需要 2 个,则放置 1,如果您需要 20 个,则放置 19。
  • [^,] * 最后一次重复该模式,不带尾随逗号。