道歉的标题道歉。
我正在尝试使用搜索的正则表达式,并且确定如下:
“全新歌[演示]”
通过使用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
定义部分是“......空格或非字母数字,非下划线字符。”所以,请帮我找一些我可能遗失的愚蠢细节,谢谢!
答案 0 :(得分:2)
您需要从模式中删除边界\b
。
>>> import re
>>> s = 'Brand New Song [demonstration]'
>>> bool(re.search (r'\[Demonstration\]', s, re.IGNORECASE))
True
单词边界不消耗任何字符,它声称一方有单词字符,而另一方则没有。如regular-expressions.info documentation中所述:
有三种不同的职位符合词边界:
- 在字符串中的第一个字符之前,如果第一个字符是单词字符。
- 在字符串中的最后一个字符之后,如果最后一个字符是单词字符。
- 字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。