我正在尝试编写一个正则表达式验证器(Python 3.8)来接受如下字符串:
foo
foo,bar
foo, bar
foo , bar
foo , bar
foo, bar,foobar
这是我到目前为止所拥有的(但它只匹配前两种情况):
^[a-zA-Z][0-9a-zA-Z]+(,[a-zA-Z][0-9a-zA-Z]+)*$|^[a-zA-Z][0-9a-zA-Z]+
但是,当我添加空白匹配 \w
时,它完全停止匹配:
^[a-zA-Z][0-9a-zA-Z]+(\w+,\w+[a-zA-Z][0-9a-zA-Z]+)*$|^[a-zA-Z][0-9a-zA-Z]+
要使用的模式是什么(解释为什么上面的第二个模式不匹配)。
最佳答案
\w
匹配 [0-9a-zA-Z_]
并且不包含空格。
您需要的是这个正则表达式:
^[a-zA-Z][0-9a-zA-Z]*(?:\s*,\s*[a-zA-Z][0-9a-zA-Z]*)*$
正则表达式详细信息:
^
:开始[a-zA-Z][0-9a-zA-Z]*
:匹配以字母开头后跟 0 个或多个字母数字字符的文本(?:
:启动非捕获组\s*,\s*
:匹配逗号,可选两边用 0 个或多个空格包围[a-zA-Z][0-9a-zA-Z]*
:匹配以字母开头后跟 0 个或多个字母数字字符的文本
)*
:结束非捕获组。重复该组 0 次或多次$
:结束
关于python - 正则表达式模式匹配逗号分隔值,逗号周围允许有空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73372091/