我正在尝试构建一个替代数据条目,其中用户将表达某种命令,我将解析。而不是深入研究我将在这项工作中使用的词汇的细节,这是我试图用雷克斯哈里森的目的来完成的一个例子。
给出以下句子
西班牙的雨落在平原上 在平原上的西班牙下雨 在草地上,雪落在伦敦伪正则表达式中的
(the (?<weather>\w+)) (in (<?city>\w+)) (falls) (on the (?<topography>\w+))
总之,我需要使用RegEx从句子中收获天气,城市和地形。
如何以任何顺序表达输入中可能出现的一组捕获?
答案 0 :(得分:2)
首先,这看起来像是一个自然语言解析器的问题。
但是如果你真的想要一个正则表达式解决方案,你必须分别挑选出每个模式,或者使用3个正则表达式,或者用管道交替它们,例如:
(the (?<weather>\w+))|(in (<?city>\w+))|(on the (?<topography>\w+))
针对您的任何一个示例句子执行上述操作,您将获得3个匹配,每个匹配将设置其中三个组中的一个。
答案 1 :(得分:2)
^(?:on the (?<area>\w+)() ?|the (?<weather>\w+)() ?|in (?<location>\w+)() ?|falls() ){4}\1\2\3\4$
将按任意顺序匹配包含每个元素的句子。这就是空括号的用途 - 每个人都必须参加比赛,以便最终的\1\2\3\4
可以匹配。
命名的反向引用将包含变量元素。