我想从一个句子中提取2个实体。如:
str1='我是汤姆,我有车'
如果有的话,我想把“汤姆”或“杰克”这个词提取出来作为名字。
我还想将单词“car”或“bike”提取为属性(如果存在)
现在我可以简单地写两个正则表达式:
re.search(r"(?P<name>tom|jack)", s).group('name')
re.search(r"(?P<property>car|bike)", s).group('property')
但我想知道我是否能把这两者结合起来。
问题是我不知道名称和属性的顺序。所以下面的代码
re.search(r"(?P<name>tom|jim).*(?P<property>car|bike)", s)
不适用于:
‘str2=我有车,我是汤姆’
我试图简单地结合两种订单情况
re.search(r"(((?P<name>tom|jack).*(?P<property>car|bike))|((?P<property>car|bike).*(?P<name>tom|jack)))", s2)
除非我改为
re.search(r"(((?P<name>tom|jack).*(?P<property>car|bike))|((?P<property2>car|bike).*(?P<name2>tom|jack)))", s2)
问题
我如何写一个普通快车提取汤姆/杰克的名字和汽车/自行车作为财产,而不考虑订单?
而且
我不想简单地列出所有可能的订单,因为如果我想提取n种实体,可能会出现太多的情况。