Python 正则表达式(在一个字符串中搜索多个值)
在Python的正则表达式中,我想要对一大段文本进行匹配,并标记出是否有任何一个正则表达式的值被匹配到……我试过用“|”这个或的方式,也试过做一个正则表达式列表,但都没有成功……下面是我想用或的方式做的一个例子。
我觉得我的“或”被注释掉了。
patterns=re.compile(r'[\btext String1\b] | [\bText String2\b]')
if(patterns.search(MyTextFile)):
print ("YAY one of your text patterns is in this file")
上面的代码总是显示匹配,无论字符串是否出现。如果我稍微调整一下,就会在第一个正则表达式上匹配到,但从来没有检查第二个……我认为这是因为“Raw”注释掉了我的或语句,那我该怎么解决这个问题呢?
我还试着通过去掉“Raw”语句,并在我的\b前面加上双斜杠来转义,但那也没用 :(
patterns=re.compile(\\btext String1\\b | \\bText String2\\b)
if(patterns.search(MyTextFile)):
print ("YAY one of your text patterns is in this file")
然后我尝试用两个单独的raw语句来做这个或,但解释器却报错说不支持的字符串操作……
patterns=re.compile(r'\btext String1\b' | r'\bText String2\b')
if(patterns.search(MyTextFile)):
print ("YAY one of your text patterns is in this file")
3 个回答
0
这一部分 [\btext String1\b] 的意思是,是否存在一个“单词分隔符”或者“text String1”中的某个字母。所以我认为它可以匹配任何内容,只要不是空行。
0
在正则表达式中,方括号 [ ]
表示一个“字符类”。这取决于方括号里面的内容,它可以表示“这些字符中的任何一个”或者“除了这些字符之外的任何字符”。如果要表示后者,通常会在开头加一个插入符号 ^
。你现在表达的意思和你想要的完全没有关系——只要把方括号去掉就可以了;这样就没问题了;-).
7
patterns=re.compile(r'(\btext String1\b)|(\bText String2\b)')
你想要的是一个分组(可以选择性捕获),而不是一个字符类。其实在这里你不需要分组:
patterns=re.compile(r'\btext String1\b|\bText String2\b')
这样也可以用(不需要任何捕获)。
你之前的写法是检查第一个方括号里的任意一个字符,或者第二个方括号里的任意一个字符。你可以看看这个正则表达式教程,可能会对你有帮助。
关于“不支持的字符串操作数”这个错误,应该很明显是怎么来的。你不能用 OR 来连接字符串,而且你要记住 | 符号是在参数到达 compile
之前就被处理的。