【问题标题】:Discard regex match if certain word appears immediately before如果某个单词出现在前面,则丢弃正则表达式匹配
【发布时间】:2012-05-27 03:45:30
【问题描述】:

我对正则表达式完全没有经验,所以如果这是一个简单的问题,我深表歉意,但我无法在任何地方找到任何答案。我正在尝试匹配[some numbers] [some letters] 形式的字符串,例如123 apples,但是当它们前面有about 一词时我不想匹配它们(例如about 10 apples 不应该匹配)。

我尝试过使用(?<!about )(\d[,\.\d]*) ([a-zA-Z]+),但这显然不起作用,因为它只是稍微移动了匹配(例如about 12 apples 匹配为2 apples)。我该怎么做才能解决这个问题?

【问题讨论】:

    标签: regex regex-negation


    【解决方案1】:

    我以前遇到过这个问题。试试这个:

    (?<!about )(\b\d[,\.\d]*\b) ([a-zA-Z]+)
    

    \b 匹配零字符的单词边界(空格后跟字母数字,反之亦然)。它将拒绝将“about 123 apples”匹配为“23 apples”,因为“2”之前没有单词边界。

    【讨论】:

    • @LevLevitsky,我的解决方案使用可变长度后视(?&lt;=\d*),python 的“re”模块不支持。
    【解决方案2】:

    你是如此接近:(?&lt;!about \d*)(\d[,\.\d]*)。将\d* 添加到您的负面看法中。

    【讨论】:

    • OP 使用 python 吗?一些正则表达式支持可变长度的后视表达式。
    猜你喜欢
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    相关资源
    最近更新 更多