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)
我在下面找到了给定的模式,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)