Python 使用正则表达式和条件插入捕获组

Python capturing groups with regex and conditional inserts

我在下面找到了给定的模式,returns 它中间没有 space。这行得通,但我还想在 \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

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

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

另见 https://ideone.com/YuWrAy