繁体   English   中英

为什么这个正则表达式不能在python中工作? 它有效且在RegExr上正常工作

[英]Why isn't this regex working in python? It's valid and works fine on RegExr

我有这个正则表达式,用于将字符串拆分为以后可以处理的标记。 我使用RegExr(在线工具)制作了它,并且在那儿工作正常,但是我无法在python中工作。 我现在正在使用它来打印比赛。

sunit = "A^2.1e2 m/s -180.2"
pat = "[A-Za-z]+(\^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)?|\/|\*|[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?"
Terms = re.findall(pat,sunit)
print Terms

正则表达式应匹配:

A^2.1e2
m
/
s
-180.2

解决了。 使用“ re.finditer()”代替“ re.findall()”似乎可行。 这是我现在想出的。 很抱歉打扰您,我早就应该可以解决这个问题的。

sunit = r"A^2.1e2 m/s -180.2"
pat = r"[A-Za-z]+(\^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)?|\/|\*|[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?"
Terms = re.finditer(pat,sunit)
for m in Terms:
    print m.group(0)

您的正则表达式中有组捕获(...) 如果您不想捕获这些组,则只需从中删除括号即可。 或在括号内使用?:忽略它,例如(?:...) 我已经更改了您的正则表达式,它将与re.findall一起re.findall

pat = "[A-Za-z]+(?:\^[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)?|\/|\*|[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?"
                 ^^                       ^^                                               ^^

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM