繁体   English   中英

正则表达式匹配科学计数法

[英]Regex to match scientific notation

我正在尝试以科学计数法匹配数字(来自此处的正则表达式):

scinot = re.compile('[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)')
re.findall(scinot, 'x = 1e4')
['1e4']
re.findall(scinot, 'x = c1e4')
['1e4']

我希望它匹配x = 1e4但不匹配x = c1e4 我应该改变什么?

更新这里的答案有相同的问题:它错误地匹配'x = c1e4'

在正则表达式的末尾添加锚,并在数字前加空格或等号:

[\s=]+([+-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+))$

只需添加[^\\w]? 排除您的第一个数字之前的所有字母数字字符:

 [+\-]?[^\w]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)

从技术上讲, \\w也将排除数字字符,但这很好,因为您的正则表达式的其余部分都可以捕获它。

如果您想做到严格,可以将\\w替换为A-Za-z

 [+\-]?[^A-Za-z]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)

另一种偷偷摸摸的方法是在正则表达式的开头简单地添加一个空格-这将强制所有匹配项必须以空格开头。

scinot = re.compile('[-+]?[\\d]+\\.?[\\d]*[Ee](?:[-+]?[\\d]+)?')

此正则表达式将帮助您找到本文中的所有科学符号。

顺便说一下,这里是类似问题的链接: 从字符串中提取科学数字

暂无
暂无

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

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