Python:Regex,查找字符串上的重复
我需要在文本字符串中查找重复项。 我已经从@Tim Pietzcker那里找到了一个非常优雅的解决方案 我对这个解决方案很满意,但想知道是否有可能进一步扩展它,使它能够接受带空格的字符串 例如Python:Regex,查找字符串上的重复,python,regex,Python,Regex,我需要在文本字符串中查找重复项。 我已经从@Tim Pietzcker那里找到了一个非常优雅的解决方案 我对这个解决方案很满意,但想知道是否有可能进一步扩展它,使它能够接受带空格的字符串 例如“一个bcab c”将返回[(abc,2)] 我尝试使用regex模式“([^\s]+?)\1+”,但运气不佳。 非常感谢您的帮助。使用(\S+?\S?\1),您可以允许字符串中的空格,如下所示,其中空格的位置在重复单词ab c中的相同位置 ab cab c 但是,如果重复单词中的空格位置不相同。这意味
“一个bcab c”
将返回[(abc,2)]
我尝试使用regex模式“([^\s]+?)\1+”
,但运气不佳。
非常感谢您的帮助。使用(\S+?\S?\1
),您可以允许字符串中的空格,如下所示,其中空格的位置在重复单词ab c
中的相同位置
ab cab c
但是,如果重复单词中的空格位置不相同。这意味着,你必须用空字符串替换无意义的空格。“用你的方法找到重复的单词。你应该首先考虑从文本中删除“”。你可以用正则表达式自己来做
>>> def repetitions(s):
... r = re.compile(r"(.+?)\1+")
... for match in r.finditer(re.sub(r'\s+',"",s)):
... yield (match.group(1), len(match.group(0))/len(match.group(1)))
...
输出
>>> list(repetitions("a bcab c"))
[('abc', 2)]
如果仍要在原始文本中保留空格,请尝试以下正则表达式:r”(\s*\s+\s*?\s*?)\1+“
。但这有局限性
>>> def repetitions(s):
... r = re.compile(r"(\s*\S+\s*?\S*?)\1+")
... for match in r.finditer(s):
... yield (match.group(1), len(match.group(0))/len(match.group(1)))
...
结果:
>>> list(repetitions(" abc abc "))
[(' abc', 2)]
>>> list(repetitions("abc abc "))
[('abc ', 2)]
>>> list(repetitions(" ab c ab c "))
[(' ab c', 2)]
>>> list(repetitions("ab cab c "))
[('ab c', 2)]
>>> list(repetitions("blablabla"))
[('bla', 3)]
如果在python中,您可以简单地执行
no_whitespaces=input_str.replace(“,”)
,然后在no_whitespaces
Hi e.s上执行正则表达式,这是一种可能性,但我的应用程序是在更大的文本结构上查找模式。因此,如果可能,我希望保留它们之间的空格,因为我计划在匹配完成后高亮显示找到的文本。如果您希望在匹配完成后高亮显示找到的文本,根据您上面的示例,输出应为[(a bc,2)]?如果没有,在匹配完成后,您将如何突出显示文本?嗨,Faith,谢谢您的输入,但是空格是不规则的,如我的示例所示。谢谢Sanooj,我最终替换了空格,然后用新编译的正则表达式和添加的空格重新匹配组。例如,匹配项“abc”将被输入到带有“\s*”的新正则表达式中。join('abc')。谢谢,再次感谢你的时间。