我试图找出一个很好的正则表达式行以匹配以下内容:
1:[any chars here except newlines]|1:[any chars here except newlines]...
我希望我的正则表达式能够匹配无数个这种类型的重复。我要弄清楚的最直接的方法是使用'(1:[^|]*\|)\1+'
,但是由于两个原因,它无法正常工作。首先,它将仅查找在字符串末尾具有附加管道的字符串。其次,第一次捕获中的文本必须始终相同。
我可以使用拆分来解决此问题,但我只是想知道在正则表达式中是否有一种很好的方法来做到这一点。
python大神给出的解决方案
将量词应用于整个组:
^(?:1:[^|\n]*\|?)+(?<!\|)$
^
在字符串开头声明位置。然后,它匹配1:
,后跟零次或多次(由|
表示)的不是*
或换行符的任何字符。整个组可以重复一次或多次(用+
指示)。 (?<!\|)
是一个否定的后向符,断言最后一个字符不是|
。 $
声明字符串末尾的位置。
它与所有这些匹配:
1:foo
1:foo|1:bar
1:foo|1:bar|1:baz
1:foo|1:bar|1:baz|1:bak
但不会匹配
1:foo|
和类似的。
RegEx Demo