正则表达式在找到单词后停止处理

时间:2017-10-22 23:35:23

标签: java regex

我有许多字符串具有以下格式:

  

发送到abc xxx zzzz在这里说更多的话

  

发送到aaaaa gggggg ddddddddddd邮箱更多的话在这里

我想提取一个在“发送到”之后开始并在“地址”或“邮箱”之后停止的子字符串。例如,在第一种情况下,子字符串将如此:“abc xxx zzzz address”,在第二种情况下,它将是:“aaaaa gggggg dddddddddddddddddddddddddddddddddddddddddd

以下表达对我不起作用。它包括“发送到”,并一直持续到字符串结束。我很感激您的反馈。

[Sent to ].*[address|mailbox])

2 个答案:

答案 0 :(得分:0)

你非常接近,除了字符类[...],你应该使用非捕获组(?:...)lookaheads/lookbehinds

(?:Sent to )(.*?)(?:address|mailbox)

(?<=Sent to )(.*?)(?=(address|mailbox))

注意点后不情愿的量词*?。它确保捕获结束而不会抓取过多的输入,这会发生在“贪婪”的星号*上(即没有问号)。

答案 1 :(得分:0)

试试这个:

(?:Sent to )(.*? words|mailbox)

比赛将包括“发送至”。但捕获的组只包含由(。*?words | mailbox)

表示的子字符串