如何在\g<1>
中选择子组引用(re.sub()
)?例如:
import re
regexp = re.compile(r'^http://(lists\.|www\.)?example\.com/')
regexp.sub(
r'https://\g<1>example.com/',
r'http://example.com/helllo-there'
)
我希望\g<1>
替换为空,可选子组不匹配(并且不会引发异常)。
我知道我可以使用regexp.match(..).groups()
来检查哪些组存在,但这对我来说似乎很多工作(我们需要一堆替换模式,因为一些示例可以达到{{1} })。它也不是很快,因为我们需要\g<6>
和 match
。
例如在JavaScript中,我可以使用replace
,如果它不匹配则会被忽略:
$1
答案 0 :(得分:3)
另一个选择是提供一个明确的空替代方案:
regexp = re.compile(r'^http://(lists\.|www\.|)example\.com/')
此外,您只能使用\1
代替\g<1>
。
答案 1 :(得分:2)
如果我理解正确,请执行x(y)?z
而不是^('?)[^']*\1,(?:[^']*'[^']*'){2}
答案 2 :(得分:2)
我会喜欢这样的。只需将模式放在非捕获组中,并将其设置为可选。现在在捕获组中包含可选的非捕获组。
>>> re.sub(r'^http://((?:lists\.|www\.)?)example\.com/',r'https://\g<1>example.com/', 'http://example.com/helllo-there')
'https://example.com/helllo-there'