Python-正规快递没有订单

时间:2018-05-24 08:42:32

标签: python regex string

我想从一个句子中提取例如2个实体。例如:

str1 ='我是汤姆,我有车'

我想提取“汤姆”这个词。或者' jack'作为名称,如果存在。

我也想提取“汽车”这个词。或者' bike'作为财产,如果存在

现在我可以简单地写两个正则表达式:

test$var4

但我想知道我是否可以将这两者结合起来。

问题是我无法知道名称和属性的顺序。所以下面的代码

re.search(r"(?P<name>tom|jack)", s).group('name')
re.search(r"(?P<property>car|bike)", s).group('property')

不起作用:

&#39; str2 =我有一辆车,我是汤姆

我试图简单地结合两个订单情况

re.search(r"(?P<name>tom|jim).*(?P<property>car|bike)", s)

它让我&#34;重新定义组名&#34;错误,除非我改为

re.search(r"(((?P<name>tom|jack).*(?P<property>car|bike))|((?P<property>car|bike).*(?P<name>tom|jack)))", s2)

问题

如何编写常规快递以提取tom / jack作为名称和汽车/自行车作为财产而不考虑订单?

此外

我不想简单列出所有可能的订单,因为如果我想提取n种实体,可能会有太多情况。

1 个答案:

答案 0 :(得分:0)

是的,它是可能的,但在外观内,否则会消耗掉字符,引擎指针也不会再回头看新的了。

\A(?=.*(?P<name>tom|jack))(?=.*(?P<property>car|bike))

Live demo

正则表达式中的每个模式都应该匹配才能成功匹配。如果它们不是强制性模式,则将它们作为可选项。

相关问题