代码之家  ›  专栏  ›  技术社区  ›  Ralph Shillington

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

  •  3
  • Ralph Shillington  · 技术社区  · 15 年前

    我正在尝试构建一个可选的数据条目,其中用户将表达某种类型的命令,我将分析这些命令。这里有一个例子,说明了我试图通过与雷克斯·哈里森的关系来完成的工作,而不是详细介绍我将在这项工作中使用的词汇。

    给出以下句子

    西班牙的雨落在平原上

    在西班牙平原上下雨

    在草地上,伦敦的雪崩

    在里面 正则表达式:

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

    简言之,我需要收获的句子,天气,城市和地形,使用regex。

    如何表示一组捕获,这些捕获可以以任何顺序出现在输入中?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Tim Pietzcker    15 年前
    ^(?:on the (?<area>\w+)() ?|the (?<weather>\w+)() ?|in (?<location>\w+)() ?|falls() ){4}\1\2\3\4$
    

    将匹配包含每个元素的句子 任何顺序都要一次 . 这就是空括号的意思-每个人都必须参加比赛,所以决赛 \1\2\3\4 可以匹配。

    命名的backreferences将包含变量元素。

        2
  •  2
  •   Max Shawabkeh    15 年前

    首先,这看起来像是一个需要自然语言解析器的问题。

    但是,如果您真的想要一个regex解决方案,您必须分别选择每个模式,要么使用3个regex,要么使用管道交替使用,例如:

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

    在上面的例子中,你将得到3个匹配项,每个匹配项都有三组中的一组。