例如,假设我想在下面的文字中将每个单词'a'更改为'an':
"a apple is a| awesome fruit."
假设“|”字符作为垃圾字符需要解决。 我希望最终产品如下:
"an apple is an| awesome fruit."
到目前为止,我得到的最接近的是以下代码:
>>> s = 'a apple is a| awesome fruit.'
>>> regex = '[^A-Za-z0-9](a)[^A-Za-z0-9]'
>>> s = re.sub(regex, 'an', s)
>>> s
'a apple isan awesome fruit.'
'a'显示在字符串的开头根本没有受到影响,而'a'后续的垃圾会破坏该区域中的字符串。我理解为什么会这样发生,我只是不知道如何使正则表达式模式适应这种情况。我的计划是只改变子串组(a),但我不知道如何在re.sub中使用它。我怎样才能替换子串组?在这种情况下,有没有更好的方法来使用正则表达式?
答案 0 :(得分:4)
您可以使用字词边界(\b
在\w
班级和\W
班级(或\w
和^
或{{}之间匹配1}}和\w
):
$
答案 1 :(得分:1)
\b
在这里是一个很好的答案,更通用的结构称为“lookahead”和“lookbehind”。这看起来像是:
re.sub(r'\ba\b', 'an', s)
或
re.sub(r'((?<=\W)|^)a((?=\W)|$)', 'an', s)