我如何使用python获取正则表达式中每个组的重复次数,并获取此组的列表?
例如:
字符串(ab)*.*?(cd)*
上的此正则表达式ababababcdcddscdcdfscdcd
应该为第一组返回4
,因为ab
在字符串中存在4次。
并为第二组返回6
,因为cd
在字符串中存在6次。
此函数或另一个函数也应该返回组列表和该行的另一部分。对于此字符串,它必须以[ab,ab,ab,ab,cd,cd,ds,cd,cd,fs,cd,cd]
列出。我尝试使用匹配对象,但是找不到找到每个组重复次数的方法。
非常感谢大家的帮助。
答案 0 :(得分:0)
量化捕获组时,它仅捕获第一个匹配项,而不是所有匹配项,因此无法获得[ab, ab, ab, ab, ...]
。
您将量词放在一个组中,以便所有重复都被立即捕获。
((ab)*).*?((cd)*)
捕获组将是:
["abababab", "ab", "cdcdcdcdcdcd", "cd"]
您可以将偶数元素的长度除以下一个元素的长度,以获得重复次数。
答案 1 :(得分:0)
在您的模式中,您正在重复一个捕获组,这将为您提供组中最后一次迭代的值。因此,例如,(ab)*
这部分将包含最后一次出现的ab的值。
matched ()()()
abababab
() captured
一种选择是使用捕获组(ab|cd)
在ab或cd上拆分以保留定界符并从结果中删除空条目。
例如
import re
s = "ababababcdcddscdcdfscdcd"
pattern = r"(ab|cd)"
result = list(filter(None, re.split(pattern, s)))
print(result)
输出
['ab', 'ab', 'ab', 'ab', 'cd', 'cd', 'ds', 'cd', 'cd', 'fs', 'cd', 'cd']