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

时间:2018-07-25 10:28:12

标签: python regex

我有以下字符串

  

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

如何对|^^^^^^^^^之后的^^为止的|为止的最后5个整数求和。

我尝试了re.split('[|^^^^^^^^^]', string),但是它使用|^分隔符分割并返回列表。

6 个答案:

答案 0 :(得分:2)

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('|')))

answer:

824824

答案 1 :(得分:1)

使用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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

您可以尝试此操作(但不带re库)

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)

答案 4 :(得分:0)

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

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

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

答案 5 :(得分:0)

具有findall()和否定前瞻:

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