我正在try 编写一个Regex验证器(Python3.8)来接受如下字符串:

foo
foo,bar
foo, bar
foo , bar
foo    ,      bar
foo, bar,foobar

这就是我到目前为止所掌握的(但它只与前两个 case 相匹配):

^[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

RegEx Details:

  • ^:开始
  • [a-zA-Z][0-9a-zA-Z]*:匹配以字母开头的文本,后跟0个或更多字母数字字符
  • (?:: Start non-capture group
    • \s*,\s*:匹配逗号,可选地两边各用0个或多个空格括起来
    • [a-zA-Z][0-9a-zA-Z]*:匹配以字母开头的文本,后跟0个或更多字母数字字符
  • )*:结束非捕获组.重复此组0次或更多次
  • $:结束

Python相关问答推荐

ValueRight:参数目标和输出必须具有相同的形状.接收:目标.形状=(无,512),输出.形状=(无,3)

取相框中一列的第二位数字

我可以使用极点优化这个面向cpu的pandas代码吗?

如何让我的Tkinter应用程序适合整个窗口,无论大小如何?

从DataFrame.apply创建DataFrame

如何根据情况丢弃大Pandas 的前n行,使大Pandas 的其余部分完好无损

使用LineConnection动画1D数据

如果条件为真,则Groupby.mean()

如何检测背景有噪的图像中的正方形

如何使用matplotlib在Python中使用规范化数据和原始t测试值创建组合热图?

rame中不兼容的d类型

如何访问所有文件,例如环境变量

在Python中管理打开对话框

如何从在虚拟Python环境中运行的脚本中运行需要宿主Python环境的Shell脚本?

多处理队列在与Forking http.server一起使用时随机跳过项目

与命令行相比,相同的Python代码在Companyter Notebook中运行速度慢20倍

解决调用嵌入式函数的XSLT中表达式的语法移位/归约冲突

幂集,其中每个元素可以是正或负""""

Python—压缩叶 map html作为邮箱附件并通过sendgrid发送

如何在Great Table中处理inf和nans