Python Regex(在一个字符串中搜索多个值)

时间:2010-07-17 15:32:15

标签: python regex

在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")

然后我尝试用or做两个单独的原始语句,并且解释器抱怨不支持的str opperands ......

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 :(得分:7)

patterns=re.compile(r'(\btext String1\b)|(\bText String2\b)')   

您想要一个组(可选择捕获),而不是一个字符类。从技术上讲,您不需要这里的小组:

patterns=re.compile(r'\btext String1\b|\bText String2\b')   

也可以(没有任何捕获)。

你拥有它的方式,它检查了第一个方括号之间的一个字符,或第二个方括号之间的一个字符。您可能会发现regex tutorial有帮助。

应该清楚“不支持的str操作数”错误来自何处。你不能OR字符串,你必须记住|在参数甚至到达compile之前处理。

答案 1 :(得分:0)

这部分[\ btext String1 \ b]表示存在“文字字符串1”或“文字字符串1”中的字母之一。所以我认为只匹配空行。

答案 2 :(得分:0)

在RE模式中,方括号[ ]表示“字符类”(取决于它们内部的内容,“这些字符中的任何一个”或“除了其中一个之外的任何字符”,后者表示为插入符^作为开头[后的第一个字符。这就是你所表达的内容,它与你想要的东西完全没关系 - 只需删除括号,你应该没事; - )。