正则表达式组将所有单词匹配到字符串行的末尾

时间:2018-04-10 15:54:50

标签: c# regex

我有以下字符串格式:

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

乔恩和萨姆不会与我的表情相匹配。

请帮忙

谢谢

4 个答案:

答案 0 :(得分:0)

尝试:

\w+\sloves(\s?\w+,)*(\s?\w+)

应该有更好的方法来写这个。 "?"说以前的角色可能存在也可能不存在。因此,如果它可能存在或不存在,您可以在空白字符上使用它。起初我认为在逗号上使用它会是一个好主意,但进一步思考它可能会引发误报,例如" Mike喜欢单词word,word"这可能不是你想要的。

答案 1 :(得分:0)

你可以这样试试:

\w+\sloves\s(?:\w+,\s*)*\w+

使用非捕获组\s*中的一个或多个空格(?:捕获一个或多个单词字符,并重复该次数*

对于最后一个单词,您可以匹配一个或多个单词字符\w

<强>解释

  • \w+匹配一个或多个单词字符
  • \s匹配空白字符
  • loves按字面意思匹配
  • \s匹配空白字符
  • (?:非捕获组
    • \w+,\s*匹配一个或多个空格字符,后跟逗号和零个或多个空格字符
  • )*关闭非捕获组并重复零次或多次
  • \w+匹配一个或多个单词字符

答案 2 :(得分:0)

答案 3 :(得分:0)

尝试这种模式:

(\w+)\sloves\s(\w+),\s?(\w+)

regex101 demo