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+ 次以匹配多次出现
$
字符串结束
如果您的名称可以包含任何非空白字符,并且您打算根据逗号匹配带有可选小数部分的数字:
^(?:[A-Z][^\s|]*\s[0-9]+(?:,\d+)?\|)+$
^
字符串开头
(?:
非捕获组
[A-Z][^\s|]*
匹配大写字符 A-Z 后跟 0+ 次任何非空白字符,除了 |
\s[0-9]+(?:,\d+)?\|
匹配空白字符、1+ 位和可选的小数部分后跟 |
)+
关闭群重复1+次
$
字符串结束
我是正则表达式的新手,在尝试找到答案几次后,我在 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+ 次以匹配多次出现$
字符串结束
如果您的名称可以包含任何非空白字符,并且您打算根据逗号匹配带有可选小数部分的数字:
^(?:[A-Z][^\s|]*\s[0-9]+(?:,\d+)?\|)+$
^
字符串开头(?:
非捕获组[A-Z][^\s|]*
匹配大写字符 A-Z 后跟 0+ 次任何非空白字符,除了|
\s[0-9]+(?:,\d+)?\|
匹配空白字符、1+ 位和可选的小数部分后跟|
)+
关闭群重复1+次$
字符串结束