用于检查单词的正则表达式恰好出现在一行中 3 次

Regex to check a word is present in line exactly three times

我正在尝试创建正则表达式。我有 4 个 Yes/No 个问题,我将答案存储在文本字段中,例如 YesYesNoNoYesNoNoYes

我希望我的正则表达式检查答案行是否包含 3 Yes.

我试过了

Yes{3}, [r'(Yes)\W+']

和其他一些愚蠢的选择。

如果您想在仅包含 NoYes 的输入文本中将匹配项限制为 3 Yes,请考虑以下正则表达式:

^(?:(?:No)*Yes){3}(?!.*Yes)

RegEx Demo

正则表达式详细信息:

  • ^: 开始
  • (?:: 启动非捕获组
    • (?:No)*:匹配0个或更多No个字符串
  • Yes:匹配文本Yes
  • ){3}:非捕获组。重复这组 3
  • (?!.*Yes):否定前瞻断言在匹配 Yes 3 次后我们没有 Yes 字符串的另一个实例。

如果前瞻在您的正则表达式风格上不可用,您可以使用此正则表达式:

^(?:(?:No)*Yes){3}(?:No)*$