繁体   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