我需要从句子中提取一些单词组。句子大致如下:
I want to see Coldplay
I want to see Rise Against in New York
我想提取see
之后的所有字符串,但是如果出现单词in
,我想停止。
see (?P<band>[\w\s]+)
匹配Coldplay
但匹配Rise against in New York
see (?P<band>[\w\s]+?)
匹配C
和R
see (?P<band>[\w\s]+?) (?=in)
匹配Rise Against
,但不匹配其他句子see (?P<band>[\w\s]+?) (?=in)?
不允许see (?P<band>[\w\s]+?)(?: in)?
匹配C
和R
去这里要走什么路?
答案 0 :(得分:0)
我想提取“ see”之后的所有字符串,但是如果出现“ in”一词,我想停止。
这可能有帮助:
(?P<band>(?<=see)(.(?!in ))*)
答案 1 :(得分:0)
如果您稍作修改,您的第三个示例可能会返回预期的匹配项:
see (?P<band>.+?)(?= in|$)
这意味着您应该强制执行结束边界匹配。也可以尝试:
see (?P<band>.*?)(?: in\b|$)
或:
see (?P<band>(?:(?! in\b).)*)
前两个正则表达式需要启用m
标志。
答案 2 :(得分:0)
如果您只想匹配单词字符和空格字符,则可以使用以下内容:
see (?P<band>[\w\s]+?)(?= in|[^\w\s]|$)
另一方面,如果不打算使用[\w\s]
,而您实际上想匹配see
和in
之间的任何内容,则可以参考revo's answer。
编辑:
似乎您也不想在比赛中加入see
。如果是这样,您可以使用Lookbehind,因此上述模式如下所示:
(?<=see )(?P<band>[\w\s]+?)(?= in|[^\w\s]|$)