Python重新表达式条件匹配

时间:2015-07-13 16:32:07

标签: python regex

捕获以下两个表达式:

str1 = "my son is 21 now"
str2 = "son is 21 now"

这两个re语句和过滤器分别捕获一个:

r1 = re.compile(".* (son)\s+(is)\s+(21) .*")
r2 = re.compile("(son)\s+(is)\s+(21) .*")

m1 = filter(r1.match, [str1, str2])
m2 = filter(r2.match, [str1, str2])

如何将r1r2合并到一个重新声明中,以便两个字符串匹配?

2 个答案:

答案 0 :(得分:1)

我想最简单的方法是在第一个正则表达式中使第一个捕获组可选:

(.* )?(son)\s+(is)\s+(21) .*

请参阅demo

答案 1 :(得分:0)

只需将^.*放在由管道符号分隔的组中。

r1 = re.compile(r"(?:^|.* )(son)\s+(is)\s+(21) .*")