【问题标题】:regex word boundaries+quotes正则表达式单词边界+引号
【发布时间】:2012-07-04 14:14:56
【问题描述】:

我有以下表达式,它应该以不区分大小写的方式匹配整个给定单词。引号是单词的一部分,所以我检查单词之前或之后是否有任何引号。例如,单词“foo”不应与文本“foo's”匹配。

word = "foo"
pattern = re.compile(r'(?<![a-z\'])%s(?![a-z\'])' % word,flags=re.IGNORECASE)

三引号除外,如果单词在三引号内(旁边)它应该匹配:

pattern.search("'''foo bar baz'''")

这次应该可以找到“foo”,但没有找到,因为这个词前面有一个引号。

【问题讨论】:

  • XD,如果它在三引号内,我的正则表达式应该找到这个词,但它没有。

标签: python regex


【解决方案1】:
((?<![a-z\'\"])|(?<=\'{3}))foo((?![a-z\'\"])|(?=\'{3}))

【讨论】:

    【解决方案2】:

    使用正则表达式(?:(?&lt;=''')|(?&lt;!'))\bfoo\b(?:(?=''')|(?!'))

    pattern = re.compile(r'(?:(?<=\'\'\')|(?<!\'))\b%s\b(?:(?=\'\'\')|(?!\'))' % word,flags=re.IGNORECASE)
    

    【讨论】:

      【解决方案3】:

      不使用前瞻:

      >>> pat = r'([\'\"]{3}|\b)foo\1'
      >>> m = re.search(pat, 'My """foo""" is rich')
      >>> re.search(pat, 'My """foo""" is rich').groups()
      ('"""',)
      >>> re.search(pat, "My '''foo''' is rich").groups()
      ("'''",)
      >>> re.search(pat, 'My """foo"" is rich').groups()
      ('',)
      >>> re.search(pat, 'My """foo\'\'\' is rich').groups()
      ('',)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-17
        • 1970-01-01
        • 2011-04-14
        • 1970-01-01
        • 1970-01-01
        • 2011-03-28
        • 2014-06-07
        相关资源
        最近更新 更多