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

10 投票
3 回答
2899 浏览
提问于 2025-04-18 11:45

我的问题很简单。

我有一个网址,有时候它的结尾会有一些特定的字符。如果这些字符存在,我想把它们加到我的新网址上。

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
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'

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

0

在编程中,有时候我们需要处理一些数据,这些数据可能来自不同的地方,比如用户输入、文件或者网络请求。为了让程序能够顺利运行,我们需要确保这些数据是正确的。

数据验证就是检查这些数据是否符合我们预期的格式和要求。比如,如果我们希望用户输入一个电子邮件地址,我们就需要确认这个输入看起来像一个有效的电子邮件,而不是随便的一串字符。

在编程中,通常会使用一些规则来验证数据,比如检查长度、格式、是否为空等。这样做的目的是为了避免程序在运行时出现错误,确保数据的可靠性。

总之,数据验证是确保程序能够正常工作的一个重要步骤,它帮助我们捕捉到潜在的问题,避免后续的麻烦。

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

你不能在替换字符串中使用可选匹配组。

那我们试试下面的方法怎么样?

>>> 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'

撰写回答