首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python re.sub仅更改单词“a”,而不是将“a”的每个实例都更改为字母

问Python re.sub仅更改单词“a”,而不是将“a”的每个实例都更改为字母
EN

Stack Overflow用户
提问于 2014-01-18 15:17:29
回答 2查看 479关注 0票数 2

例如,假设我想要将以下文本中的每个单词'a‘更改为'an’:

代码语言:javascript
复制
"a apple is a| awesome fruit."

假设"|“字符是一个需要处理的垃圾字符。我希望最终产品如下所示:

代码语言:javascript
复制
"an apple is an| awesome fruit."

到目前为止,我得到的最接近的代码是以下代码:

代码语言:javascript
复制
>>> 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中使用它。怎样才能只替换子字符串组?对于这种情况,有没有更好的使用正则表达式模式的方法?

EN

回答 2

Stack Overflow用户

发布于 2014-01-18 15:19:05

代码语言:javascript
复制
>>> s = 'a apple is a| awesome fruit.'
>>> regex = r'\ba\b'
>>> s = re.sub(regex, 'an', s)
>>> s
'an apple is an| awesome fruit.'
票数 4
EN

Stack Overflow用户

发布于 2014-01-18 15:22:45

在这里,单词边界的\b是一个很好的答案,更通用的构造称为“前视”和“后视”。在这里,它看起来像:

代码语言:javascript
复制
re.sub(r'\ba\b', 'an', s)

或

代码语言:javascript
复制
re.sub(r'((?<=\W)|^)a((?=\W)|$)', 'an', s)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21201260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档