正则表达式匹配(name =“myName”。* house =“myHouse”| house =“myHouse”。* name =“myName”)而不使用OR

时间:2017-03-31 05:25:47

标签: python regex

我正在编写一个正则表达式,需要满足以下标准。

(name="myName".*house="myHouse"|house="myHouse".*name="myName")

名字或房子都可以先出现。我的正则表达式应该匹配。

实际上,在编写重复代码后,我的真实代码会更大。

有没有办法像上面那样使用没有重复的正则表达式?

2 个答案:

答案 0 :(得分:1)

没有|的唯一可行方法管道运营商要做两个单独的正则表达式搜索。所以答案是否定的,没有别的办法。

此外,如果这是您正在搜索的XML或HTML,强烈建议您使用诸如Beautiful Soup之类的解析器而不是正则表达式。

答案 1 :(得分:0)

您可以使用正向前瞻断言。这有点像jejune,但是如果你想保持简单,它应该有用。你想要做的是确认:

I am looking at .*house

    AND

I am looking at .*name

不考虑两个.*部分的长度。

因此,由于超前表达式是零宽度(也就是说,它们匹配而没有实际消耗任何字符 - 它们只是“向前看”),您可以根据需要将它们粘贴在一起。< / p>

请注意:执行此操作可能会变得非常昂贵且性能明显。您必须扫描,然后重新扫描您匹配的每个额外术语。如果你匹配的字符串很长,这会让你失望很多。

示例正则表达式:

(?=.*name="myName")(?=.*house="myHouse")