需要一个正则表达式来匹配 3 个成员的简单系列

需要一个正则表达式来匹配 3 个成员的简单系列

我需要一个可以匹配以下示例字符串的正则表达式:

 Example 1: "red, blue, and hot"
 Example 2: "red, blue, or hot"

三个单独的单词,前两个单词后跟逗号,并且有连词“and”(情况 1)或者“or”(情况 2)。

Case 1: "<word01>, <word02>, and <word03>"
Case 2: "<word01>, <word02>, or <word03>"

我有以下正则表达式(\w+,(\s|\n)+){2}(and|or),可以成功匹配字符串,但它也会匹配包含我的示例表达式的字符串。我只希望当字符串包含我的示例表达式而不包含其他内容时匹配成功。

换句话说,green, red, blue, and hot不应该匹配,因为匹配项前包含一个额外的单词和逗号。

答案1

REGEX 变体

根据您想要如何处理标点符号,我给了您一些变化。

正则表达式➡ (^\w+\,\s+\w+\,\s+(and|or)\s+\w+\Z)                               
匹配 测试字符串
red, blue, and hot
红色、蓝色和热色。
绿色、红色、蓝色和热色
红色、蓝色和热色,但不包括绿色

 

正则表达式➡ (^\w+\,\s+\w+\,\s+(and|or)\s+\w+\.\Z)                         
匹配 测试字符串
红色、蓝色和热色
red, blue, and hot.
绿色、红色、蓝色和热色
红色、蓝色和热色,但不包括绿色

 

正则表达式➡ (^\w+\,\s+\w+\,\s+(and|or)\s+\w+\.?\Z)                         
匹配 测试字符串
red, blue, and hot
red, blue, and hot.
绿色、红色、蓝色和热色
红色、蓝色和热色,但不包括绿色

 

使用 REGEX

正则表达式 描述                                                                          
    ^ 字符串的开头(位置)
    \Z 字符串的结尾(位置)
    + 前一个 token > 0 次
    ? 前一个 token < 2 次
    \w 任何单个单词字符
    \, 逗号字符
    \s 空格字符
    | 分离备选方案(或者
    \。 句号字符

相关内容