我正在解析财务文件,目标是将一行分成3个部分。例如,我有以下一行:
Telephone 9,000 9,000
当我使用此regex命令时:
regex = r"([A-Za-z ]+)(?=\d|\S).*?([\d,]+)\s([\d,]+)"
re.findall(regex, <string>)
这是我得到的输出:
('Telephone ', '5,172', '1,771')
现在,假设我在此财务报表中具有负数(它们在财务文档中用括号表示):
string = Telephone (9,000) (9,000)
如何通过考虑括号将其分为三类?
我尝试使用
\(\*
和\)\*
来解决零个或多个括号,但它返回None
:regex = r"([A-Za-z ]+)(?=\d|\S).*?(\(\*[\d,]+\)\.)\s(\(\*[\d,]+\)\)"
re.findall(regex, string)
如何更新我的正则表达式函数以解决这种情况?
另外,如果字符串中有连字符,我该如何接起?
string = Telephone (9,000) -
最佳答案
以下模式对我有用:
texts = ['Telephone 9,000 9,000',
'Telephone (9,000) (9,000)',
'Telephone (9,000) -'
]
for text in texts:
print(re.findall("([\w+ ]+) (\(?[\d,-]+\)?) (\(?[\d,-]+\)?)", text))
输出量
['Telephone', '9,000', '9,000']
['Telephone', '(9,000)', '(9,000)']
['Telephone', '(9,000)', '-']
关于python - 解析财务报表中的负数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53674179/