Python 解析财务报表中的负数
我正在解析财务文档,目标是将一行分解为3个组件。例如,我有以下行:Python 解析财务报表中的负数,python,regex,python-3.x,Python,Regex,Python 3.x,我正在解析财务文档,目标是将一行分解为3个组件。例如,我有以下行: Telephone 9,000 9,000 当我使用这个regex命令时: regex = r"([A-Za-z ]+)(?=\d|\S).*?([\d,]+)\s([\d,]+)" re.findall(regex, <string>) 现在假设本财务报表中有负数(在财务文件中用括号表示): string = Telephone (9,000) (9,000) 如何通过计算括号将其分为三组? 我曾尝试使用
Telephone 9,000 9,000
当我使用这个regex命令时:
regex = r"([A-Za-z ]+)(?=\d|\S).*?([\d,]+)\s([\d,]+)"
re.findall(regex, <string>)
现在假设本财务报表中有负数(在财务文件中用括号表示):
string = Telephone (9,000) (9,000)
如何通过计算括号将其分为三组?
我曾尝试使用\(\*
和\)\*
来解释零个或多个括号,但它返回无
:
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)', '-']
你似乎对逃逸括号很困惑。你的正则表达式有一些转义的
*
s,所以我真的不知道你想在这里做什么
假设所有输入都是格式良好的(即没有缺少括号或类似的内容),并且您只想提取三个值,您可以使用以下正则表达式:
([A-Za-z ]+)\s+(\(?[\d,]+\)?)\s+(\(?[\d,]+\)?)
第一部分与您的尝试相同。然后这个模式重复两次:
\s+(\(?[\d,]+\)?)
在开始时,我们首先匹配一些空格\s+
,然后开始捕获组。在capture组中,我们首先查看是否有括号\(?
?
是此处要使用的量词,因为我们允许使用0或1个括号。然后是一个简单的字符类[\d,]+
来匹配数字,然后是一个可选的结束括号\)?
\s+(\(?[\d,]+\)?)