正则表达式与科学符号匹配

2024-04-25 09:39:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试匹配科学记数法中的数字(regex from here):

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

我希望它与x = 1e4匹配,而不是{}。我该换什么?在

更新:答案here有相同的问题:它不正确地匹配'x = c1e4'。在


Tags: 答案fromrehere数字科学eeregex
3条回答

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

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

顺便说一句,下面是类似问题的链接: Extract scientific number from string

在regex结尾添加锚定,在数字前添加替代空格或等号:

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

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

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

从技术上讲,\w也将排除数字字符,但这没问题,因为其余的regex将捕捉到它。在

如果您想要真正严格,可以将\w替换为A-Za-z

^{pr2}$

另一种鬼鬼祟祟的方法是在正则表达式的开头添加一个空格,这将强制所有匹配项都必须以空格开头。在

相关问题 更多 >