3

使用正则表达式为以下行提取表达式的最佳方法是什么:

Sigma 0.10 index = $5.00
beta .05=$25.00
.35 index (or $12.5)
Gamma 0.07

在任何情况下,我都想从每行中提取数值(例如,第 1 行中的“0.10”)和(如果有的话)美元金额或第 1 行的“$5.00”。

4

3 回答 3

4
import re
s="""Sigma 0.10 index = $5.00
beta .05=$25.00
.35 index (or $12.5)
Gamma 0.07"""
print re.findall(r'[0-9$.]+', s)

输出:

['0.10', '$5.00', '.05', '$25.00', '.35', '$12.5', '0.07']

更严格的正则表达式:

print re.findall(r'[$]?\d+(?:\.\d+)?', s)

输出:

['0.10', '$5.00', '$25.00', '$12.5', '0.07']

如果你还想匹配.05

print re.findall(r'[$]?(?:\d*\.\d+)|\d+', s)

输出:

['0.10', '$5.00', '.05', '$25.00', '.35', '$12.5', '0.07']
于 2013-05-30T03:54:14.120 回答
1

好吧,基本的正则表达式是:\$?\d+(\.\d+)?,它将为您提供数字。不幸的是,我知道 JavaScript/C# 中的正则表达式,所以不确定如何在 python 中执行多行。不过应该是一个非常简单的标志。

于 2013-05-30T03:54:30.260 回答
1

使用re.MULTILINE标志和\n来表示换行符。

source = '''Sigma 0.10 index = $5.00
beta .05=$25.00
.35 index (or $12.5)
Gamma 0.07'''
import re

# only handles two top lines; extend to taste
rx = re.compile(
  'Sigma (\d*\.\d+) index = (\$\d*\.\d+)\nbeta (\d*\.\d+).*', 
   re.MULTILINE
)

print rx.search(source).groups()
# prints ('0.10', '$5.00', '.05')

还要考虑.split('\n')在您的线路上并使用几个更简单的正则表达式,每个结果行一个。

于 2013-05-30T03:59:43.400 回答