正则表达式从句子中获取数据

时间:2013-10-26 17:04:25

标签: java regex

是否可以编写匹配不同模式的正则表达式,以便从文本中提取数据,如下例所示:

City A is 10 minutes away from City B and 6 minutes from City C.

我希望得到第一个城市(城市A),然后是每个与之相关的城市及其各自的距离。

在这种情况下,我需要提供以下信息:

City A
City B => 10
City C => 6

提前致谢

编辑:

城市数量不固定。第一个城市可以链接到1个或N个城市。

1个城市的例子:

City A is 10 minutes away from City B.

示例3:

City A is 10 minutes away from City B, 6 minutes from City C and 8 minutes from City D.

3 个答案:

答案 0 :(得分:1)

如果你想解析某个包含固定单词组合的文本,比如你的例子,那么它适用于正则表达式过滤。否则,您最好按照上面的建议使用语法和词法分析器。

答案 1 :(得分:1)

也许这个

 #  "\\G(?:(?:^(?<TimeBase>)\\s*City\\s+(?<CityBase>\\w+))|(?:(?:\\s+(?:is|and)|\\s*,)\\s+(?<TimeExtra>\\d+)\\s+minutes(?:\\s+away)?\\s+from\\s+City\\s+(?<CityExtra>\\w+)))"

 \G  
 (?:
      (?:
           ^ 
           (?<TimeBase> )
           \s* City \s+ 
           (?<CityBase> \w+ )
      )
   |  
      (?:
           (?:
                \s+ 
                (?: is | and )
             |  \s* , 
           )
           \s+ 

           (?<TimeExtra> \d+ )
           \s+ minutes 
           (?: \s+ away )?
           \s+ from \s+ City \s+ 
           (?<CityExtra> \w+ )
      )
 )

答案 2 :(得分:-1)

当然有可能;任何事情都可以做到。

更好的问题是:“这个问题有更好的解决方案吗?”

也许你想要考虑一个简单的语法,词法分析器和解析器。

如果正则表达式没有削减它,你可以尝试ANTLR或JavaCC。