首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正则表达式的非运算符

正则表达式的非运算符
EN

Stack Overflow用户
提问于 2015-08-21 09:03:33
回答 1查看 1.1K关注 0票数 1

使用python脚本,我正在清理一段想要替换以下单词的文本:

推广代码,宣传代码,代码,优惠券,优惠券代码,代码.

但是,如果它们以“#”开头,我不想替换它们。因此,#、#promo、#code、#优惠券应该保持原样。

我试着跟随它的正则表达式:

代码语言:javascript
运行
复制
1. \b(promocode|promo code|promo|coupon code|code|coupon)\b
2. (?<!#)(promocode|promo code|promo|coupon code|code|coupon)

他们都不起作用。,我基本上是在寻找一些东西,可以让我说“不要以#和开头”()(推广代码\\promo代码\

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-21 09:05:44

你需要用消极的眼光看:

代码语言:javascript
运行
复制
(?<!#)\b(?:promocode|promo code|promo|coupon code|code|coupon)\b

这个(?<!#)将确保您只匹配这些单词,如果在它们之前没有#\b将确保您只匹配整个单词。非捕获组(?:...)仅用于分组目的,以避免在列表中的每个选项(例如\bpromo\b|\bcode\b.)周围重复\b。为什么要使用非捕获组?这样它就不会干扰Match结果。在挖掘我们需要的值(=组)时,我们不需要不必要的开销。

请参阅这里的演示

请参见IDEONE演示,只删除第一个promo

代码语言:javascript
运行
复制
import re
p = re.compile(r'(?<!#)\b(?:promocode|promo code|promo|coupon code|code|coupon)\b')
test_str = "promo #promo "
print(p.sub('', test_str))

关于你的正则表达式的几句话。

\b(promocode|promo code|promo|coupon code|code|coupon)\b是好的,但它也匹配替换组中没有#前面的单词。

(?<!#)(promocode|promo code|promo|coupon code|code|coupon)正则表达式更好,但仍然不匹配所有单词(参见这个演示)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32136439

复制
相关文章

相似问题

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