0

我需要在这种字符串中找到一个地方的名称(例如圣安东尼奥,但可以是任何名称)

  1. 圣安东尼奥的天气如何
  2. 明天圣安东尼奥的天气如何
  3. 圣安东尼奥明天天气如何

使用这个 JAVA 正则表达式:

(What's|What is|What will be) the weather( tomorrow)?( in (\D*))?

我分别得到:

  1. 开始() = 0,结束() = 33

    group(0) = "What's the weather in San Antonio"
    
    group(1) = "What's"
    
    group(2) = "null"
    
    group(3) = " in San Antonio"
    
    group(4) = "San Antonio"
    
  2. 开始() = 0,结束() = 48

    group(0) = "What will be the weather in San Antonio tomorrow"
    
    group(1) = "What will be"
    
    group(2) = "null"
    
    group(3) = " in San Antonio tomorrow"
    
    group(4) = "San Antonio tomorrow"
    
  3. 开始() = 0,结束() = 48

    group(0) = "What will be the weather tomorrow in San Antonio"
    
    group(1) = "What will be"
    
    group(2) = " tomorrow"
    
    group(3) = " in San Antonio"
    
    group(4) = "San Antonio"
    

如果句子总是以城市名称本身结束,那么问题可以很容易地解决,我会寻找“in”这个词,剩下的就是城市名称。但问题是,在第 2 句中,我无法理解“明天”是否存在以及如何将其从城市名称组中删除。

对于正则表达式测试,我正在使用此页面

http://www.cis.upenn.edu/~matuszek/General/RegexTester/regex-tester.html

感谢帮助。

4

1 回答 1

2

以下应该适用于您的所有测试字符串:

(What's|What is|What will be) the weather( tomorrow)?( in (\D*?)( tomorrow)?$)?

新结果(第 4 组永远是城市):

  1. 圣安东尼奥的天气如何

    start() = 0, end() = 33
    group(0) = "What's the weather in San Antonio"
    group(1) = "What's"
    group(2) = "null"
    group(3) = " in San Antonio"
    group(4) = "San Antonio"
    group(5) = "null"
    
  2. 明天圣安东尼奥的天气如何

    start() = 0, end() = 48
    group(0) = "What will be the weather in San Antonio tomorrow"
    group(1) = "What will be"
    group(2) = "null"
    group(3) = " in San Antonio tomorrow"
    group(4) = "San Antonio"
    group(5) = " tomorrow"
    
  3. 圣安东尼奥明天天气如何

    start() = 0, end() = 48
    group(0) = "What will be the weather tomorrow in San Antonio"
    group(1) = "What will be"
    group(2) = " tomorrow"
    group(3) = " in San Antonio"
    group(4) = "San Antonio"
    group(5) = "null"
    
于 2013-04-15T22:02:22.340 回答