我正在解析财务文件,目标是将一行分成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/

10-12 06:03