我无法打印匹配的正则表达式的组件。
我正在学习python3,我需要验证命令的输出是否符合我的需求。我有以下短代码:
#!/usr/bin/python3
import re
text_to_search = '''
1 | 27 23 8 |
2 | 21 23 8 |
3 | 21 23 8 |
4 | 21 21 21 |
5 | 21 21 21 |
6 | 27 27 27 |
7 | 27 27 27 |
'''
pattern = re.compile('(.*\n)*( \d \| 2[17] 2[137] [ 2][178] \|)')
matches = pattern.finditer(text_to_search)
for match in matches:
print (match)
print ()
print ('matched to group 0:' + match.group(0))
print ()
print ('matched to group 1:' + match.group(1))
print ()
print ('matched to group 2:' + match.group(2))
以及以下输出:
<_sre.SRE_Match object; span=(0, 140), match='\n 1 | 27 23 8 |\n 2 | 21 23 8 |\n 3 >
matched to group 0:
1 | 27 23 8 |
2 | 21 23 8 |
3 | 21 23 8 |
4 | 21 21 21 |
5 | 21 21 21 |
6 | 27 27 27 |
7 | 27 27 27 |
matched to group 1: 6 | 27 27 27 |
matched to group 2: 7 | 27 27 27 |
请给我解释一下:
1)为什么“打印(匹配)”仅打印匹配的开始,如果输出大于某个阈值,它会限制输出吗?
2)为什么将组(1)打印为“ 6 | 27 27 27 |” ?我希望(.*\n)*
尽可能地贪婪,以便它消耗1-6行中的所有内容,而使text_to_search
的最后一行与group(2)
相匹配,但似乎(.*\n)*
花费了仅第6行。这是为什么?为什么在打印组(1)时没有打印第1-5行?
3)我试图通过regex tutorial进行尝试,但是未能理解(?...)
的那些技巧。如何验证最后一行中的数字是否相等(所以27 27 27
可以,但是21 27 27
不能)?
答案 0 :(得分:1)
1)print(match)
仅显示对象的轮廓。 match
是SRE_Match
object,因此,要从中获取信息,您需要执行类似match.group(0)
的操作,即访问存储在对象中的值。>
2)要捕获第1-6行,您需要根据this regex tester将(.*\n)*
更改为((?:.*\n)*)
,
重复捕获组将仅捕获最后一次迭代。在重复的组周围放置一个捕获组以捕获所有迭代,或者如果您对数据不感兴趣,则使用非捕获组
3)要匹配特定数字,您需要使其更具体,并在末尾将这些数字包括在单独的组中。