首页 > 解决方案 > Python regex 如何找到匹配的(子)字符串出现次数?

问题描述

我需要一个可以归结为这样的结构:“(子字符串)a 至少出现 1 次,然后是(子字符串)b 的出现次数相同”。所以“ab”、“aaabbb”和“aaaaabbbb”被接受,“aab”或“aaabbbb”不被接受。

我发现如果出现次数是固定的(比如 5 次),我可以使用 re.compile("a{5}b{5}") ,但我不知道出现次数。我只需要他们平等。我试过re.compile("a{x}b{x}")了,但我猜那是一厢情愿的想法。

标签: pythonregex

解决方案


内置re不支持所有格量​​词/原子组,不支持递归,也不支持平衡组,所有这些功能都可以帮助您构建此模式。

因此,最简单的解决方案是安装 PyPi 正则表达式库,pip install regex然后使用How can we match a^nb^n? 解决方案。

否则,输入一些 Python 代码和一个简单的(a+)(b+)正则表达式:

import re
texts = [ "ab", "aaabbb", "aaaaabbbbb", "aab", "aaabbbb" ]
for text in texts:
    match = re.fullmatch(r'(a+)(b+)', text)
    if len(match.group(1)) == len(match.group(2)):
        print( text, '- MATCH' )
    else:
        print( text, '- NO MATCH' )

看到这个演示产生

ab - MATCH
aaabbb - MATCH
aaaaabbbbb - MATCH
aab - NO MATCH
aaabbbb - NO MATCH

笔记:

  • re.fullmatch(r'(a+)(b+)', text)匹配仅包含一个或多个as 和一个或多个bs的整个字符串
  • if len(match.group(1)) == len(match.group(2)):a正在检查s 和s的长度b,并且只传递它们的计数相等的字符串。

推荐阅读