无法正确使用正则表达式来正确处理括号

时间:2014-10-03 22:33:58

标签: python regex

道歉的标题道歉。

我正在尝试使用搜索的正则表达式,并且确定如下:

  

“全新歌[演示]”

通过使用re.search()在字符串中的某处找到“[Demonstration]”。这是我认为应该返回True的示例:

bool (re.search (r"\b\[Demonstration\]\b", "Brand New Song [demonstration]", re.IGNORECASE))

更简单,这也返回False:

bool (re.search (r"\b\[\b", " [ "))

我一直在使用\b作为捕获字符串的开头和结尾,因为它应该表示单词(as per documentation here)的开头或结尾处的任何空字符串,而我不会看看我搞砸了什么。

继续迷惑,以下返回True:

bool (re.search (r"\b\[\b", "_[_"))

同样令人困惑,因为\b 定义部分是“......空格或非字母数字,非下划线字符。”所以,请帮我找一些我可能遗失的愚蠢细节,谢谢!

1 个答案:

答案 0 :(得分:2)

您需要从模式中删除边界\b

>>> import re
>>> s = 'Brand New Song [demonstration]'
>>> bool(re.search (r'\[Demonstration\]', s, re.IGNORECASE))
True

单词边界不消耗任何字符,它声称一方有单词字符,而另一方则没有。如regular-expressions.info documentation中所述:

  

有三种不同的职位符合词边界:

     
    
        
  • 在字符串中的第一个字符之前,如果第一个字符是单词字符。
  •     
  • 在字符串中的最后一个字符之后,如果最后一个字符是单词字符。
  •     
  • 字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
  •