繁体   English   中英

使用re分割字符串并在python中添加整数

[英]split string using re and add integers in python

我有以下字符串

'100000 | ^ 104,500 | ^^ 0 ^ 0 ^ 0 ^ 0 ^ 0 ^ 0 ^ 0 ^ 0 | ^^^^^^^^^^^ 412824 | 103000 | 103000 | 103000 | 103000 ^^'

如何对|^^^^^^^^^之后的最后5个整数求和,直到^^|分隔|

我尝试了re.split('[|^^^^^^^^^]', string)但它使用|^定界符进行了拆分并返回列表。

import re
string = '100000|^104,500|^^0^0^0^0^0^0^0|^^^^^^^^^412824|103000|103000|103000|103000^^'    
answer = sum(map(int, re.search(r'\^{9}(.+)\^\^', string).group(1).split('|')))

回答:

824824

使用re.search #Lookbehind和Lookahead

演示:

import re
s = '100000|^104,500|^^0^0^0^0^0^0^0|^^^^^^^^^412824|103000|103000|103000|103000^^'
d = re.search(r"(?<=\^{9}).*?(?=\^{2})", s)
if d:
    print( sum(map(int, d.group().split("|"))) )

输出:

824824

这些字符在正则表达式中很特殊,需要转义。 试试这个:

import re

s = '100000|^104,500|^^0^0^0^0^0^0^0|^^^^^^^^^412824|103000|103000|103000|103000^^'
nums = re.split(r'\|\^{9}', s)[1]
# Find all integers and sum
total = sum(map(int, re.findall(r'\d+', nums)))
print(total)

输出:

824824

您可以尝试此操作(但无需重新库)

a='100000|^104,500|^^0^0^0^0^0^0^0|^^^^^^^^^412824|103000|103000|103000|103000^^'
a=a.split('^'*9)
a=(a[1]).replace('^^','')
a=a.split('|')
s = 0
for i in a:
    s += int(i)
print(s)

完全正则表达式的解决方案可以使用此正则表达式:

.+\\|\\^{9}|[\\^\\|]+

您可以使用此正则表达式进行拆分。 结果数组将包含一些空元素,但是,您可以在添加时轻松检查它们。

使用findall()和负前瞻:

sum( int(i) for i in re.findall(r"(?!.*\^{9})\d+",s))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM