【问题标题】:Regular Expression - Match pattern that does not contain a stringPython 正则表达式 - 不包含字符串的匹配模式
【发布时间】:2015-04-23 12:36:11
【问题描述】:

我对正则表达式很陌生,并且一直在四处寻找没有成功的方法。给定一个字符串,我想删除任何以“abc”开头、以“abc”结尾且中间不包含“abc”的模式。如果我这样做了

'abc.*(abc).*abc'

它将匹配任何以“abc”开头、以“abc”结尾且中间包含“abc”的模式。我该怎么做相反的事情。我试试

'abc.*^(abc).*abc'

但它不会起作用。

【问题讨论】:

    标签: python regex


    【解决方案1】:

    您尝试否定部分模式的语法不正确。

    此外,字符类之外的^ 断言字符串开头的位置。您需要使用Negative Lookahead 断言并确保anchor 整个模式。

    ^abc(?:(?!abc).)*abc$
    

    Live Demo

    【讨论】:

    • 非常感谢,很抱歉我不能为答案投票。我可以问你一个跟进,所以这适用于 re.match('^abc(?:(?!abc).)*abc$','abc222abc') 但是如果我想做这个多行,它似乎不是工作 re.match('^abc(?:(?!abc).)*abc$','111/nabc222abc/nxyz/n', flags = re.MULTILINE)。你有什么建议吗?
    • 嘿,对不起,我是该网站的新手,我想我可以接受这两个答案。
    • 很高兴我能帮上忙。并改用re.search()
    【解决方案2】:

    您可以尝试以下模式:

    ^abc((?!abc).)*abc$
    

    (?!abc)Negative Lookahead - 断言不可能匹配字符串中的 abc

    Debuggex Demo

    【讨论】:

    • 非常感谢 Kasra,很抱歉我不能投票,也不能同时接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    相关资源
    最近更新 更多