簡體   English   中英

如何在Python中使用正則表達式re.sub()一個可選的匹配組?

[英]How to re.sub() a optional matching group using regex in Python?

我的問題很簡單。

我有一個URL,有時它以特定字符結尾。 如果它們存在,我想將它們添加到我的新URL。

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”,在這種情況下我不想做出修改。

您不能在替換字符串中使用可選匹配組。

以下方法怎么樣?

>>> 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'
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'
re.sub(r'url(#*.*)', r'url\1', test1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM