如何在正则表达式匹配中获得所有可能的解释?

时间:2014-11-25 11:45:48

标签: python regex re2

如果"Who acted as (?P<role>.*) in (?P<movie>.*)"是模板 我想匹配像"Who acted as tony montana in Scarface"这样的查询。

如果角色名称中有&#34; in&#34;这里或如果电影名称中有&#34; in&#34;,则正则表达式匹配将出错。

例如:"Who acted as k in men in black" will give "k in men" as role.

可能是一种非贪婪的方法适用于此查询,但如果电影中包含单词&#34;在&#34;中它将会折腾。 我如何在这里获得所有可能的解释?

1 个答案:

答案 0 :(得分:0)

根据'a in b in c in d'之类的短语,这将通过单词in生成所有可能的分区:

words = phrase.split()

for n, w in enumerate(words):
    if w == 'in':
        print '(%s) in (%s) ' % (
            ' '.join(words[:n]),
            ' '.join(words[n+1:]))

对于您的具体问题,如果短语中有三个in s,则“中间”解释((a in b) in (c in d))最可能是正确的,但有两个in s无法通过文本操作来解决这个问题,因为“左”和“右”分区同样可能,请考虑:

Who acted as jeebs in men in black
Who acted as woman in red in matrix

您必须使用NLP或数据库驱动的方法来正确解析它。