Pythonre.sub公司:替换包含任意数量的捕获组的匹配字符串的一部分

2024-06-12 08:26:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道还有其他一些问题是关于使用re.sub公司,但答案是围绕着回到捕获群体。我的情况有点不同:

我在应用程序的另一部分中生成'(?:i|æ|ʏ|ɞ).(?:i|æ|ʏ|ɞ)'和{}之类的正则表达式。如果我有字符串'abcd',以及对('b', 'c'),我想替换{}的所有实例,其中regex匹配句点字符(.)。在

例如,如果我有规则'(?:x|y|z).(?:h|i|j)',并且所需的更改是a到{},则应该发生以下情况:

xah -> xbh
yai -> ybi
zaz -> zaz (no change)

我尝试过使用re.sub,在搜索字符串中将.替换为我的目标,并在替换字符串中替换我的替换,但这会替换目标字符串中的整个匹配,而实际上我只想更改一小部分。我甚至不知道在我的团队中有什么样的替代品,我甚至不知道他们会有什么样的问题。在

非常感谢任何帮助!很难解释,所以如果需要进一步澄清,请询问:)。在


Tags: 实例字符串答案re应用程序目标规则情况
1条回答
网友
1楼 · 发布于 2024-06-12 08:26:09

您可以使用“lookahead”和“lookback”断言,如下所示:

import re

tests = (
    ('xah', 'xbh'),
    ('yai', 'ybi'),
    ('zaz', 'zaz'),
)

for test_in, test_out in tests:
    out = re.sub('(?<=x|y|z)a(?=h|i|j)', 'b', test_in)
    assert test_out == out

相关问题 更多 >