如何打印正则表达式的部分内容



>我无法打印匹配正则表达式的组件。

正在学习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_searchgroup(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(要匹配特定的数字,您需要使其更具体,并在最后将这些数字包含在单独的组中。

最新更新