我有以下字符串格式:
Mike loves Sarah, Wendy, Carmen, Jon
Wendy loves Josh, Polly, Sam
Barry loves 50cent,Obama,Donald, Mike
我想要一个正则表达式匹配模式
person_name[space]loves[space]person_name[comma],person_name
person_name[space]loves[space]person_name[comma],[space]person_name
我想出了以下表达式。它匹配得很好,除了最后一个单词
\w+\sloves\s(\w+,\s|\w+,)*
所以在字符串中
Mike loves Sarah, Wendy, Carmen, Jon
Wendy loves Josh, Polly, Sam
乔恩和萨姆不会与我的表情相匹配。
请帮忙
谢谢
答案 0 :(得分:0)
尝试:
\w+\sloves(\s?\w+,)*(\s?\w+)
应该有更好的方法来写这个。 "?"说以前的角色可能存在也可能不存在。因此,如果它可能存在或不存在,您可以在空白字符上使用它。起初我认为在逗号上使用它会是一个好主意,但进一步思考它可能会引发误报,例如" Mike喜欢单词word,word"这可能不是你想要的。
答案 1 :(得分:0)
你可以这样试试:
使用非捕获组\s*
中的一个或多个空格(?:
捕获一个或多个单词字符,并重复该次数*
。
对于最后一个单词,您可以匹配一个或多个单词字符\w
。
<强>解释强>
\w+
匹配一个或多个单词字符\s
匹配空白字符loves
按字面意思匹配\s
匹配空白字符(?:
非捕获组
\w+,\s*
匹配一个或多个空格字符,后跟逗号和零个或多个空格字符)*
关闭非捕获组并重复零次或多次\w+
匹配一个或多个单词字符答案 2 :(得分:0)
答案 3 :(得分:0)