如何以特定顺序从字符串中捕获一组组

时间:2010-02-10 15:18:37

标签: .net regex

我正在尝试构建一个替代数据条目,其中用户将表达某种命令,我将解析。而不是深入研究我将在这项工作中使用的词汇的细节,这是我试图用雷克斯哈里森的目的来完成的一个例子。

给出以下句子

  西班牙的雨落在平原上

     在平原上的西班牙下雨

     在草地上,雪落在伦敦

正则表达式

中的

(the (?<weather>\w+)) (in (<?city>\w+)) (falls) (on the (?<topography>\w+))

总之,我需要使用RegEx从句子中收获天气,城市和地形。

如何以任何顺序表达输入中可能出现的一组捕获?

2 个答案:

答案 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可以匹配。

命名的反向引用将包含变量元素。