python - 正则表达式模式匹配逗号分隔值,逗号周围允许有空格

标签 python regex

我正在尝试编写一个正则表达式验证器(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]*)*$

RegEx Demo

正则表达式详细信息:

  • ^:开始
  • [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/

相关文章:

python - 导入错误 PyQt5 python

python - Ansible - 尝试 python3.5 时找不到 Virtualenv 可执行文件

python - 导入错误 - 在没有已知父包的情况下尝试相对导入

javascript - 正则表达式中插入符号 (^) 和美元符号 ($) 的必要性是什么?

php - 如何在 URL 中的最后一个斜杠之前和倒数第二个斜杠之后获取字符串

javascript - 正则表达式排除美元符号和数字中的点

python - 基于列组合的向量乘法多个数据帧

python - 无法挤压 dim[1],预期维度为 1,结果为 5

javascript - 测试正则表达式时,Continue 语句被忽略

regex - 正则表达式程序不打印