字范围或\ w在负面的背后

时间:2015-11-02 14:50:56

标签: java regex

我试图在文本中Delhi的地方提取正则表达式 sending to: GK Delhi,其中sending to:已修复,我不想捕获GK处的任何内容。实际上GK在我的案例中将是一个单词,我所做的应该是:(?<=sending to: \w )Delhi,意味着如果单词以sending to:开头并以Delhi结尾然后返回德里。
请帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

三分,

  1. \w匹配单个字符。使用\w+匹配一个或多个或\w*以匹配零个或多个单词字符。
  2. 不要忘记DKDelhi之间的空格:\s+
  3. 只是一个注释:(?<=构造是正面外观,而非负面构造。
  4. 所以正则表达式看起来像这样:

    (?<=sending to:\s*\w+\s+)Delhi
    

    请注意,任意长度的lookbehind仅支持极少数正则表达式引擎,但您没有说明您正在使用的工具。

    更新:

    Java不支持任意长度的lookbehind表达式。 你有的可能性是:

    • 匹配的文字将始终为Delhi(成功匹配时)。因此,如果您只是检查匹配,那么您可以使用正则表达式:sending to:\s*\w+\s+Delhi

    • 如果您希望以后将正则表达式扩展到其他城镇,那么您可以使用capturing group。正则表达式将是,例如sending to:\s*\w+\s+(Delhi|Mumbai),在Java代码中,您将通过matcher.group(1)获取城市名称。

    如果您需要更详细的建议,请发布您使用正则表达式的实际Java代码。

相关问题