希望在正则表达式匹配中使用or运算符(|),但它不起作用。获取错误消息为“不支持的操作数”。有人能看一下吗?你知道吗
甚至尝试了|和“或”,但都不起作用。你知道吗
import re
date = "02.29.2001"
date29 = "((02)\.(0[1-9]|[12][0-9]))"
date28 = "((02)\.(0[1-9]|[12][0-8]))"
res = re.search((date28 | date29)+("\.(\d+)"),date)
在这里,如果我只使用date29,那么它匹配,但当我把它改为如上所述,它不匹配。你知道吗
您将Python语法(
or
布尔运算符和|
位OR运算符)与regex语法混合使用。你知道吗虽然正则表达式确实使用
|
来分隔备用模式,但正则表达式中使用的语法是不同的,并且与Python操作符分隔开来。你不能任意地把两者结合起来。正则表达式语法通过字符串传递给re
模块函数,而不是作为Python表达式。你知道吗这样做有效:
因为正则表达式模式是使用正则表达式语法first组合成单个字符串的。你知道吗
请注意,这里使用
date28
没有任何意义,因为date28
可以匹配的所有内容也可以由date29
匹配。此外,date28
与02.19.
不匹配,有效日期为2月份。你知道吗如果您想从“标签”组件构造正则表达式,我建议您使用
re.VERBOSE
标志,这会导致忽略正则表达式中的空格(包括换行符),并增加对使用# ...
注释的支持。要匹配空白,请使用显式类,如[ ]
、[\n]
、\s
等。我也经常将其与显式组名结合使用。你知道吗你的表达可以写成:
这种格式还可以更容易地看到您在任何一种模式的开头都匹配了
02\.
,这是相当多余的,而且上面的模式当然仍然存在着[12][0-8]
与[12][0-9]
都是多余的,实际上并不匹配2月19日的问题。你知道吗就我个人而言,我只需要使用} 来验证匹配的文本实际上是一个有效的日期。构建一个regex来验证日期是一项艰巨的任务,根本不值得这么做。你知道吗
\d{2}\.\d{2}\.\d{4}
,然后使用^{例如,您试图构建的模式没有告诉您2001年不是闰年,因此
02.29.2001
不是有效日期。但是试图用datetime.strptime()
解析它会抛出一个异常,告诉您这不是一个有效的日期:相关问题 更多 >
编程相关推荐