我是一个初学者,并且坚持用python编写正则表达式。我编写了此正则表达式来检查给定输入中是否存在匹配项。这是名为regexs的文件中的代码片段:
regexp = '[-]?\d+(\.\d+)?[\', ][-]?\d+(\.\d\d+)?'
num = re.compile(regexp, re.IGNORECASE)
我正在使用此正则表达式在测试文件中进行测试:
def full_match(regex, text):
"""
Gives a list of all complete matches
"""
ans = []
for match in regex.finditer(text):
ans.append(match.group(0))
return ans
tn = full_match(num, text)
print(
'num:',
'5,9' in tn,
'5.0, 9.0' in tn,
'-7.4159265 1110' in tn,
'3.4.5, 1' not in tn,
'1 2' not in tn,
'3 - 4' not in tn
)
for match in regexs.num.finditer(text):
if match.group(0) == '5,9':
print(' match1:', '5' in match.groups(), '9' in match.groups())
if match.group(0) == '-7.4159265 1110':
print(' match2:', '-7.4159265' in match.groups(), '1110' in match.groups())
我执行上面的代码得到的输出是:
num:真假真真真真
match1:错误错误
match2:错误错误
问题是我需要获取True
作为所有情况的输出。但是我的正则表达式在某些情况下会失败。
请帮助解决此问题。
TIA。
答案 0 :(得分:0)
首先,如果您指定一个带有反斜杠的正则表达式,
使用原始字符串(r'...'
)。否则你必须加倍
反斜杠。
要匹配所有情况,请使用以下正则表达式:
-?\d+(?:\.\d+)* ?[\',-]? ?\d+(?:\.\d+)?
与您的正则表达式不同:
[-]
更改为普通-
。当您需要方括号时
尝试匹配任何个提供的字符(不是一个)。?:
之后的2个地方添加(
。我认为没有必要匹配
这些“点数字”块作为捕获组。?
之后的(...)
更改为*
。这样你会匹配
这样的字符串,例如3.4.5
(两个“点数字”块)。?[\',-]? ?
(可选空格,然后
撇号,逗号或减号(也是可选的),然后再次
可选空间)。\d
之前删除\d+
。请注意,-
和[
之间的最后一个(或第一个)位置的]
表示
本身,因此无需使用反斜杠将其转义。
其他简化:如果将正则表达式字符串定义为r"..."
(定界
(用双引号引起来),则无需转义撇号。
然后正则表达式可以是:
r"-?\d+(?:\.\d+)* ?[',-]? ?\d+(?:\.\d+)?"