【问题标题】:Regex to match everything until pattern with an exception in it正则表达式匹配所有内容,直到其中包含异常的模式
【发布时间】:2021-05-10 13:15:59
【问题描述】:

这是我的正则表达式

\d+%[^\.][^0-9]*?((?!original).)percentage*

我希望它从一个百分比(即 10%)直到单词百分比匹配

  • 10%“随便”的百分比

除非它包含“原始”一词:

  • 10% 原始百分比

所以,“whatever”可以是任何东西,直到出现“percentage”这个词,除非其中包含“original”这个词。

我已经能够得到我的正则表达式,但它只有在“百分比”位于新行的开头时才能正常工作

在某些情况下,10% 的销售额以原始百分比开头 --> 我的正则表达式与此字符串匹配 但我不想,因为它包含“原始”一词

10% 的销售额以一定的百分比开始 --> 我的正则表达式匹配这个字符串,它是 好的,因为它不包含“原始”一词

原版的10%
销售比例更高-->我的 正则表达式与这个字符串不匹配,没关系,因为它 包含单词“original”(可能是因为新行以百分比开头?)

原始销售额的 10%
是那个百分比 --> 我的正则表达式与这个字符串匹配,但我不想这样做,因为它包含单词“original”

如果我的解释有点奇怪,我很抱歉,英语不是我的第一语言。

谢谢!!!

【问题讨论】:

    标签: python regex regex-lookarounds regex-negation


    【解决方案1】:

    您必须重复这部分 ((?!original).) 并在 percentage* 之后省略 *,因为它可以选择重复 e 字符。

    然后,如果您不想在两者之间匹配数字,则可以使用 [^\d\r\n] 而不是 . 匹配除换行符或数字之外的任何字符

    \d+%[^.](?:(?!original\b)[^\d\r\n])*\bpercentage\b
    

    模式匹配:

    • \d+% 匹配 1+ 个数字和 %
    • [^.] 匹配除点以外的任何字符 (注意这是广泛匹配,您也可以使用空格代替)
    • (?:非捕获组
      • (?!original\b)[^\d\r\n] 当 wat 直接位于右侧不是 original 时,匹配除数字或换行符以外的任何字符
    • )*关闭群组并重复0+次
    • \bpercentage\b匹配percentage

    Regex demo

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 2018-10-17
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 2017-09-02
    • 2011-04-13
    • 2021-05-26
    • 2022-08-21
    相关资源
    最近更新 更多