gpt4 book ai didi

python - 正则表达式的 NOT 运算符

转载 作者:太空宇宙 更新时间:2023-11-04 08:53:59 26 4
gpt4 key购买 nike

使用 python 脚本,我正在清理一段文本,我想在其中替换以下单词:
促销代码,促销代码,优惠券,优惠券代码,代码。

但是,如果它们以“#”开头,我不想替换它们。因此,#promocode、#promo、#code、#coupon 应该保留他们的方式。

我尝试使用正则表达式:

1. \b(promocode|promo code|promo|coupon code|code|coupon)\b
2. (?<!#)(promocode|promo code|promo|coupon code|code|coupon)

他们都没有工作。 我基本上是在寻找可以让我说“不以 # 和开头”的东西(促销代码|促销代码|促销|优惠券代码|代码|优惠券)

有什么建议吗?

最佳答案

你需要使用负面回顾:

(?<!#)\b(?:promocode|promo code|promo|coupon code|code|coupon)\b

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

参见 demo here

参见 IDEONE demo , 只有第一个 promo被删除:

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)正则表达式更好,但您仍然无法匹配整个单词(请参阅 this demo)。

关于python - 正则表达式的 NOT 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32136439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com