首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换除字符串开头以外的所有子字符串实例。

替换除字符串开头以外的所有子字符串实例。
EN

Stack Overflow用户
提问于 2017-05-09 09:06:59
回答 1查看 82关注 0票数 2

我正在处理一个公交系统的大量大写站点名称,并希望将诸如"at“和"the”这样的单词去大写。到目前为止,我可以匹配所有我想要的实例,除了我无法弄清楚如何不匹配在字符串开头出现的实例。(即防止将“事物”改为“事物”)

到目前为止,这是我的代码:

代码语言:javascript
复制
>>>re.sub("(?i)(?<!\w)the(?!\w)", "zzz", "The Thing To The Theme of Athens, (The) Goethe")
'zzz Thing To zzz Theme of Athens, (zzz) Goethe'

他是我目前的解决办法:

代码语言:javascript
复制
>>>re.sub("(?i)(?<![\w|])the(?!\w)", "zzz", "|" + "The Thing To The Theme of Athens, (The) Goethe")[1:]
'The Thing To zzz Theme of Athens, (zzz) Goethe'

这个解决方案显然并不理想,因为我更希望有一个“纯”正则表达式解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-09 09:08:19

您可以用一个正的看台替换负的\w,用\W来更改

代码语言:javascript
复制
(?i)(?<=\W)the(?!\w)
    ^^^^^^^

(?<!\w)的负查找可以表示为(?<=^|\W) (在Python中不起作用),我们只需要将^替代方案去掉。(?<=\W)正向后视要求在t的左侧立即使用一个非字字符。见regex演示

Python演示

代码语言:javascript
复制
import re
res = re.sub(r"(?i)(?<=\W)the(?!\w)", "zzz", "The Thing To (The) Theme of Athens, The Goethe")
print(res) # => The Thing To (zzz) Theme of Athens, zzz Goethe
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43865614

复制
相关文章

相似问题

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