我有许多字符串具有以下格式:
发送到abc xxx zzzz在这里说更多的话
或
发送到aaaaa gggggg ddddddddddd邮箱更多的话在这里
我想提取一个在“发送到”之后开始并在“地址”或“邮箱”之后停止的子字符串。例如,在第一种情况下,子字符串将如此:“abc xxx zzzz address”,在第二种情况下,它将是:“aaaaa gggggg dddddddddddddddddddddddddddddddddddddddddd
以下表达对我不起作用。它包括“发送到”,并一直持续到字符串结束。我很感激您的反馈。
[Sent to ].*[address|mailbox])
答案 0 :(得分:0)
你非常接近,除了字符类[...]
,你应该使用非捕获组(?:...)
或lookaheads/lookbehinds:
(?:Sent to )(.*?)(?:address|mailbox)
或
(?<=Sent to )(.*?)(?=(address|mailbox))
注意点后不情愿的量词*?
。它确保捕获结束而不会抓取过多的输入,这会发生在“贪婪”的星号*
上(即没有问号)。
答案 1 :(得分:0)
试试这个:
(?:Sent to )(.*? words|mailbox)
比赛将包括“发送至”。但捕获的组只包含由(。*?words | mailbox)
表示的子字符串