【问题标题】:how do I print parts of regex如何打印正则表达式的一部分
【发布时间】:2019-07-13 22:41:19
【问题描述】:

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

我正在学习 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) 为什么 group(1) 打印为“6 | 27 27 27 |” ?我希望(.*\n)* 尽可能贪婪,所以它消耗了 1-6 行的所有内容,留下text_to_search 的最后一行与group(2) 匹配,但似乎(.*\n)* 只占用了第 6 行。这是为什么?为什么打印 group(1) 时不打印第 1-5 行?
3) 我试图通过regex tutorial,但未能理解(?...) 的这些技巧。如何验证最后一行中的数字是否相等(所以27 27 27 可以,但21 27 27 不行)?

【问题讨论】:

  • 你想要得到什么?每行作为一个组?至于你的第二点:重复的捕获组只会捕获最后一次迭代。在重复组周围放置一个捕获组以捕获所有迭代
  • 您是否尝试过使用任何在线正则表达式测试器/工具分析您的模式?
  • 您可能应该问三个不同的问题 - 这不是讨论论坛或教程。问题 2 在 SO 上可能有重复。
  • 也适用于第二季度:regexp group repetition in python]

标签: python regex


【解决方案1】:

1) print(match) 仅显示对象的轮廓。 match 是一个SRE_Match object,因此为了从中获取信息,您需要执行类似于match.group(0) 的操作,它正在访问存储在对象中的值。

2) 要捕获第 1-6 行,您需要根据 this regex tester(.*\n)* 更改为 ((?:.*\n)*)

重复捕获组将仅捕获最后一次迭代。如果您对数据不感兴趣,请在重复组周围放置一个捕获组以捕获所有迭代或使用非捕获组

3) 要匹配特定数字,您需要使其更具体,并将这些数字包含在最后的单独组中。

【讨论】:

  • 谢谢回答 1 和 2。
    我不想有具体的数字。我想确保第一个、第二个和最后一个数字相等。在最后一行它是什么值并不重要,对我来说只有平等才重要。
猜你喜欢
  • 2012-03-24
  • 2018-11-15
  • 1970-01-01
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 2023-04-02
  • 2018-11-29
相关资源
最近更新 更多