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

2024-04-19 22:35:37 发布

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

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

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

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

我希望在我的代码中也这样做

#!/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只打印组列表(一个字符大小的字符串列表)

^{pr2}$

我想要的是打印整个匹配位置(意味着所有连续的字符序列)和匹配子字符串的长度。在

有人能用re模块来帮忙吗?在

谢谢。在


Tags: 字符串代码httpstestrecom列表字符
1条回答
网友
1楼 · 发布于 2024-04-19 22:35:37

^{}返回捕获的子匹配。在

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.

您可以使用^{}轻松访问所有匹配的组,包括第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在这里是多余的,因为模式中没有^或{}来重新定义的行为。在

相关问题 更多 >