python - 在正则表达式中重复正则表达式 block

标签 python regex

我正在尝试找出一个很好的正则表达式行来匹配以下内容:

1:[any chars here except newlines]|1:[any chars here except newlines]... 

我希望我的正则表达式能够匹配这种类型的无限次重复。我最接近弄清楚的是 '(1:[^|]*\|)\1+',但它不起作用有两个原因。首先,它只会找到在字符串末尾有一个附加竖线的字符串。其次,第一次捕获中的文本必须始终相同。

我可以使用拆分来解决这个问题,但我只是想知道是否有在正则表达式中执行此操作的好方法。

最佳答案

将量词应用于整个组:

^(?: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

关于python - 在正则表达式中重复正则表达式 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26974209/

相关文章:

python - 调用函数时,Python 3 中未列出 TypeError : must be str,

regex - RegEx用于匹配Lucene中的任何2个字母+任何6个数字

c++ - 无法使用 boost::regex

python - 计算不包含年份的可能日期组合

python - 在设置中使用 debug=false 的 Django-Compress 给出错误

Python 数据框 : Get alternative days based on month?

python - 用于匹配 MAC 地址并提取其值的正则表达式

python - 搜索关系属性的精确匹配

javascript - nodejs request.url.match(regexp) 似乎除了匹配之外还返回匹配的子字符串

javascript - 用于查找字符串开头和结尾的特殊字符和空格的正则表达式是什么?