【问题标题】:Python capturing groups with regex and conditional insertsPython 使用正则表达式和条件插入捕获组
【发布时间】:2017-10-27 18:22:29
【问题描述】:

我在下面找到了给定的模式并在中间没有空格的情况下返回它。这可行,但我还想在子中的\g<2>\g<3> 之间添加一个/,但前提是它不存在;否则会有重复的//。我尝试过的所有事情都会弄乱捕获组。有什么帮助吗?

pattern = re.compile(r"((\d{1,2}/\d{1,2}) (/?(\d{4}|\d{2})))")

report_text = pattern.sub("\g<2>\g<3>", report_text)

这是我的输入和预期结果:

Inputs                    Expected

02/58 98                  02/58/98
02/58 /98                 02/58/98
02/58 9518                02/58/9518
02/58 /98                 02/58/9518

【问题讨论】:

标签: regex optional backreference capturing-group


【解决方案1】:

您的模式似乎有点过度使用捕获组。您可以将可选的/? 放在捕获组之外,这样它就会匹配但不会重新插入,只需在替换中使用/,例如

re.sub(r'(\d{1,2}/\d{1,2}) /?(?:(\d{4}|\d{2}))', r'\g<1>/\g<2>', report_text)

另见https://ideone.com/YuWrAy

【讨论】:

  • 你是绝对正确的。谢谢。我有远见卓识。
猜你喜欢
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
  • 1970-01-01
  • 2016-12-23
  • 2016-02-10
  • 1970-01-01
相关资源
最近更新 更多