使用正则表达式为以下行提取表达式的最佳方法是什么:
Sigma 0.10 index = $5.00
beta .05=$25.00
.35 index (or $12.5)
Gamma 0.07
在任何一种情况下,我想从每一行(例如第1行的“0.10”)和(如果有的话)第1行的美元金额或“$ 5.00”中提取数值。
答案 0 :(得分: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']
答案 1 :(得分:1)
基础正则表达式将是:\$?\d+(\.\d+)?
,它将为您提供数字。不幸的是,我在JavaScript / C#中知道正则表达式,因此不确定如何在python中执行多行。应该是一个非常简单的旗帜。
答案 2 :(得分: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')
并使用几个更简单的正则表达式,每个结果行一个。