如何在Python中使用正则表达式re.sub()一个可选的匹配组?

时间:2014-07-01 15:30:48

标签: python regex

我的问题很简单。

我有一个网址,有时会以特定字符结尾。如果它们存在,我想将它们添加到我的新网址。

test1 = "url#123"
test2 = "url"

r = re.sub(r"url(#[0-9]+)?", r"new_url\1", test1)
# Expected result: "new_url#123"
# Actual result: "new_url#123"

r = re.sub(r"url(#[0-9]+)?", r"new_url\1", test2)
# Expected result: "new_url"
# Actual result: "error: unmatched group"

当然,我不能只做re.sub("url", "new_url", test),因为例如它可能是“url / 123”,在这种情况下我不想做出修改。

3 个答案:

答案 0 :(得分:8)

您无法在替换字符串中使用可选匹配组。

以下方法怎么样?

>>> import re
>>> test1 = "url#123"
>>> test2 = "url"
>>> re.sub(r"url((?:#[0-9]+)?)", r"new_url\1", test1)
new_url#123
>>> re.sub(r"url((?:#[0-9]+)?)", r"new_url\1", test2)
new_url

顺便说一句,如果你使用regex,你可以使用可选的匹配组:

>>> import regex
>>> test1 = "url#123"
>>> test2 = "url"
>>> regex.sub(r"url(#[0-9]+)?", r"new_url\1", test1)
'new_url#123'
>>> regex.sub(r"url(#[0-9]+)?", r"new_url\1", test2)
'new_url'

答案 1 :(得分:0)

In [4]: re.sub(r"url(#[0-9]+|$)", r"new_url\1", test1)
Out[4]: 'new_url#123'

In [5]: re.sub(r"url(#[0-9]+|$)", r"new_url\1", test2)
Out[5]: 'new_url'

答案 2 :(得分:0)

re.sub(r'url(#*.*)', r'url\1', test1)