如何获取每行中每组正则表达式的重复次数?

2024-06-25 06:49:54 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使用python获得regexp中每个组的重复次数,并获得这些组的列表?你知道吗

例如:
这个正则表达式在字符串ababababcdcddscdcdfscdcd
应该为第一个组返回4,因为ab在字符串中存在4次。
并为第二个组返回6,因为cd在字符串中存在6次。你知道吗

这个函数或者其他函数也应该返回一个组列表和行的另一部分。对于这个字符串,它必须是带有[ab,ab,ab,ab,cd,cd,ds,cd,cd,fs,cd,cd]的列表。我试着使用match object,但是我找不到一种方法来获得每组的重复次数。你知道吗

非常感谢大家的帮助。你知道吗


Tags: 方法函数字符串列表abobjectmatchds
2条回答

在您的模式中,您正在重复一个捕获组,它将为您提供组中最后一次迭代的值。例如,这个部分(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']

Python demo

当您量化一个捕获组时,它只捕获第一个匹配项,而不是所有匹配项,因此您无法获得[ab, ab, ab, ab, ...]。你知道吗

你可以把量词放在一个组中,这样所有的重复都可以一次捕捉到。你知道吗

((ab)*).*?((cd)*)

捕获组将是:

["abababab", "ab", "cdcdcdcdcdcd", "cd"]

您可以将偶数元素的长度除以以下元素的长度,得到重复的次数。你知道吗

相关问题 更多 >