Google 表单字段验证中的可重复正则表达式模式

Repeatable regex pattern in Google Forms field validation

我是正则表达式的新手,在尝试找到答案几次后,我在 google 表单字段验证中遇到了问题。这是我目前的状况 (expression in regex101):

[A-Z].*\s[0-9,].+\|$

预期的答案应该是:Peter 50|Alex 20|

但是当受访者在字段中填写类似 Peter 50|Alex| 的内容(没有数字)时,它也是一个匹配项。如何强制受访者按照某种模式指定姓名及其对应的编号?

具体应该是:Name1 number1|Name2 number2|Name3 number3|Name4 number4|...

谢谢!

您可以使用

^(?:\p{L}+\s\d+\|)+$

参见 RE2 regex demo (Google Forms uses RE2 regex flavor)。

详情:

  • ^ - 字符串开头
  • (?: - 非捕获组的开始:
    • \p{L}+ - 一个或多个字母
    • \s - 一个空格(使用 \s+ 允许一个或多个空格)
    • \d+ - 一位或多位数字
  • )+ - 小组结束,重复一次或多次
  • $ - 字符串结尾。
  • \|$

问题是 .+ 匹配太多,因为 . 匹配任何字符。

您可以在末尾使用竖线重复匹配,并以大写字符 [A-Z] 开头。

^(?:[A-Z]\w*\s[0-9]+\|)+$
  • ^ 字符串开头
  • (?:非捕获组
    • [A-Z]\w* 匹配一个大写字符 A-Z 和可选的单词字符
    • \s[0-9]+\| 匹配一个空白字符和 1+ 个数字和 |
  • )+ 关闭群组并重复 1+ 次以匹配多次出现
  • $ 字符串结束

Regex demo

如果您的名称可以包含任何非空白字符,并且您打算根据逗号匹配带有可选小数部分的数字:

^(?:[A-Z][^\s|]*\s[0-9]+(?:,\d+)?\|)+$
  • ^ 字符串开头
  • (?:非捕获组
    • [A-Z][^\s|]* 匹配大写字符 A-Z 后跟 0+ 次任何非空白字符,除了 |
    • \s[0-9]+(?:,\d+)?\| 匹配空白字符、1+ 位和可选的小数部分后跟 |
  • )+关闭群重复1+次
  • $ 字符串结束

Regex demo