>我无法打印匹配正则表达式的组件。
我正在学习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(我试图通过正则表达式教程,但未能理解(?...)
的这些技巧。如何验证最后一行中的数字是否相等(因此27 27 27
正常,但21 27 27
不合适(?
1( print(match)
仅显示对象的轮廓。 match
是一个SRE_Match
对象,因此为了从中获取信息,您需要执行类似 match.group(0)
的操作,即访问存储在对象中的值。
2( 要捕获第 1-6 行,您需要根据此正则表达式测试器将(.*n)*
更改为((?:.*n)*)
,
重复的捕获组将仅捕获最后一个迭代。在重复组周围放置一个捕获组以捕获所有迭代,或者如果您对数据不感兴趣,请改用非捕获组
3(要匹配特定的数字,您需要使其更具体,并在最后将这些数字包含在单独的组中。