Python重新模块findall并打印整个匹配子字符串

标签 python regex

我在 python 中遇到了一个复杂的问题。

我想在控制台中打印匹配出现次数和字符串,如下所示:https://regex101.com/r/yA4wS1/1

正如您所看到的,在线正则表达式测试器会突出显示匹配项,以便您可以看到整个匹配项及其长度。

我想在我的代码中做同样的事情

#!/usr/bin/python
# -*- coding: utf-8 -*-

import re
p = re.compile(ur'(\w)\1\1\1+', re.MULTILINE)
test_str = u'aaaaaadgfdhgfbbbbgggee)ehje ekekkkkkeefh ehfeff88888éh\"hr ekkKKKKK\njhxjhjhhhhh\nthe the\n\"eeeeeeeeaaaabcaaaaadexxxdddzdzzzz\"\n\"eeeeeeeeaaaabcaaaaadexxxdddzdzzzz\"\n\"eeeeeeeeaaaabcaaaaadexxxdddzdzzzz\"\n\"aaaeeeeeeeeaaaadzxzzzzffffrrrr\"\n\"aaa\"'

#m = re.findall(p, test_str)
m = p.findall(test_str)

print (m)

但是 python 只是打印组列表(一个字符大小的字符串列表)

/home/nixmind/devspace/py_algo> ./str_count_match_re.py
[u'a', u'b', u'k', u'8', u'K', u'h', u'e', u'a', u'a', u'z', u'e', u'a', u'a', u'z', u'e', u'a', u'a', u'z', u'e', u'a', u'z', u'f', u'r']

我想要的是打印整个匹配位置(指所有连续的字符序列),以及匹配的子字符串的长度。

有人可以帮助使用re模块实现这一目标吗?

谢谢。

最佳答案

re.findall返回捕获的子匹配。

Return all non-overlapping matches of pattern in string, as a list of strings*... If one or more groups are present in the pattern, return a list of groups; this will be a list of tuples if the pattern has more than one group.

您可以使用re.finditer()允许轻松访问所有匹配的组,包括第 0 个组(即整场比赛):

Return an iterator yielding MatchObject instances over all non-overlapping matches for the RE pattern in string.

示例代码:

import re
p = re.compile(ur'(\w)\1\1\1+')
test_str = u'aaaaaadgfdhgfbbbbgggee)ehje ekekkkkkeefh ehfeff88888éh\"hr ekkKKKKK\njhxjhjhhhhh\nthe the\n\"eeeeeeeeaaaabcaaaaadexxxdddzdzzzz\"\n\"eeeeeeeeaaaabcaaaaadexxxdddzdzzzz\"\n\"eeeeeeeeaaaabcaaaaadexxxdddzdzzzz\"\n\"aaaeeeeeeeeaaaadzxzzzzffffrrrr\"\n\"aaa\"'
print ([x.group(0) for x in p.finditer(test_str)])

参见IDEONE demo

请注意,这里的 re.MULTILINE 是多余的,因为模式中没有 ^ 也没有 $ 来重新定义其行为。

关于Python重新模块findall并打印整个匹配子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34088878/

相关文章:

java - 拆分字符串保留所有尾随的空元素

python - 错误 "Failed to decode response from marionette"后继续 selenium 脚本

python - "invalid default value"带有 lxml 和 ATTLIST 标签

python - 计算两个字符串之间的唯一 ID 重叠

C++ 子模式匹配

正则表达式检测 IE 5、6、7 和 8,但不检测其他版本

python - 如何从 Python 中的数据框中排除非数字整数

python - GAE 以编程方式批量上传

c# - Multifunction RegEx for parsing JCL variables - out of working 解决方案

python - 在Python中使用正则表达式搜索从PDF转换的类(class)