用正则表达式匹配数字的表示形式

2024-04-25 14:16:27 发布

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

我试图找到一个正则表达式,可以用来扫描如果字符串是一个数字。你知道吗

这里有一些例子:

>>> expressions = [ 
  "3",
  "13.",
  ".328",
  "41.16",
  "+45.80",
  "+0",
  "-01",
  "-14.4",
  "1e12",
  "+1.4e6",
  "-2.e+7",
  "01E-06",
  "0.2E-20"
]

如何在正则表达式中捕获所有这些示例?你知道吗


Tags: 字符串示例数字expressions例子e6
2条回答

在这种情况下,try/except块可能更好

expressions = [
  "3",
  "13.",
  ".328",
  "41.16",
  "+45.80",
  "+0",
  "-01",
  "-14.4",
  "1e12",
  "+1.4e6",
  "-2.e+7",
  "01E-06",
  "0.2E-20",
  "word",
  "3ad34db"
]

for value in expressions:
    try:
        num = float(value)
        print('{} is a number'.format(num))
    except ValueError:
        print('{} is not a number'.format(value))

输出

3.0 is a number
13.0 is a number
0.328 is a number
41.16 is a number
45.8 is a number
0.0 is a number
-1.0 is a number
-14.4 is a number
1000000000000.0 is a number
1400000.0 is a number
-20000000.0 is a number
1e-06 is a number
2e-21 is a number
word is not a number
3ad34db is not a number

您可以使用[-+]?[0-9]*\.?[0-9]*([eE][-+]?[0-9]+)?'来匹配数字,但提出的解决方案@Cyber要好得多。你知道吗

def filterPick(lines, regex):
    matches = map(re.compile(regex).match, lines)
    return [m.group() for m in matches if m]

print filterPick(expressions, '[-+]?[0-9]*\.?[0-9]*([eE][-+]?[0-9]+)?')

>>>['3', '13', '.328', '41.16', '+45.80', '+0', '-01', '-14.4', '1e12', '+1.4e6', '-20', '01E-06', '0.2E-20', '3']

相关问题 更多 >

    热门问题