python - Python regex 如何找到匹配的(子)字符串出现次数?
问题描述
我需要一个可以归结为这样的结构:“(子字符串)a 至少出现 1 次,然后是(子字符串)b 的出现次数相同”。所以“ab”、“aaabbb”和“aaaaabbbb”被接受,“aab”或“aaabbbb”不被接受。
我发现如果出现次数是固定的(比如 5 次),我可以使用
re.compile("a{5}b{5}")
,但我不知道出现次数。我只需要他们平等。我试过re.compile("a{x}b{x}")
了,但我猜那是一厢情愿的想法。
解决方案
内置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)
匹配仅包含一个或多个a
s 和一个或多个b
s的整个字符串if len(match.group(1)) == len(match.group(2)):
a
正在检查s 和s的长度b
,并且只传递它们的计数相等的字符串。
推荐阅读
- python - 获取 URL 的 XML 以使用 Python 进行抓取
- python - 如何在完成工作后停止线程并在按下按钮时重新启动它?
- php - Codeigniter 从 URL localhost:82/project 中删除 index.php
- python - 如果他们说不,我如何提示用户退出并重新启动程序
- php - 方法 $_GET 和 $_POST 在 Joomla 上不起作用
- python - 生成器的 Keras class_weight
- dart - 颤振本地通知未在状态栏中显示图标
- html - html 和 css 按钮不会与预先存在的表单对齐
- android - 服务和片段之间的通信
- python - 单击时如何获取 QMenu 项的名称?