首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将括号内的数字解析为负数

将括号内的数字解析为负数
EN

Stack Overflow用户
提问于 2019-05-29 09:17:26
回答 4查看 75关注 0票数 1

如何将字符串列表中括号内的数字解析为负数(或带负号的字符串)。

示例

代码语言:javascript
复制
input  
list1= ['abcd','(1,234)','Level-2 (2):','(31)%', 'others','(3,102.2)%']  

output  
['abcd',-1234,'Level-2 (2):','-31%', 'others','-3102.2%']

应该解析只有括号内有数字的字符串或括号中带有逗号/点的数字,后面跟着百分比(%)号。其他字符串(如'Level-2 (2):' )不应被解析。

我试过了

代码语言:javascript
复制
translator = str.maketrans(dict.fromkeys('(),'))
['-'+(x.translate(translator)) for x in list1]

但是输出是(每个元素都附加了一个- )

代码语言:javascript
复制
['-abcd', '-1234', '-Level-2 2:', '-31%', '-others', '-3102.2%']
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-05-29 09:32:16

您可以尝试使用re.sub,例如:

代码语言:javascript
复制
import re

list1 = ['abcd','(1,234)','Level-2 (2):','(31)%', 'others','(3,102.2)%']
res = [re.sub(r'^\(([\d+.,]+)\)(%?)$', r'-\1\2', el) for el in list1] 
# ['abcd', '-1,234', 'Level-2 (2):', '-31%', 'others', '-3,102.2%']
票数 4
EN

Stack Overflow用户

发布于 2019-05-29 09:26:31

尝试使用re.match

Ex:

代码语言:javascript
复制
import re

list1= ['abcd','(1,234)','Level-2 (2):','(31)%', 'others','(31.2)%']  
result = []
for i in list1:
    m = re.match(r"\((\d+[.,]?\d*)\)(%?)", i) 
    if m:
        result.append("-" + m.group(1)+m.group(2))
    else:
        result.append(i)
print(result)

输出:

代码语言:javascript
复制
['abcd', '-1,234', 'Level-2 (2):', '-31%', 'others', '-31.2%']

按意见更新

代码语言:javascript
复制
import re

list1 = ['abcd','(1,234)','Level-2 (2):','(31)%', 'others','(3,102.2)%']  
result = []
for i in list1:
    m = re.match(r"\((\d+(?:,\d+)*(?:\.\d+)?)\)(%?)", i) 
    if m:
        result.append("-" + m.group(1).replace(",", "")+m.group(2))
    else:
        result.append(i)
print(result)

输出:

代码语言:javascript
复制
['abcd', '-1234', 'Level-2 (2):', '-31%', 'others', '-3102.2%']
票数 2
EN

Stack Overflow用户

发布于 2019-05-29 09:53:01

如果您不需要将值转换为int或float,re.matchstr.translate就应该这样做:

代码语言:javascript
复制
rx = re.compile('\([\d,.]+\)%?$')
tab = str.maketrans({i: None for i in '(),'})

output = ['-' + i.translate(tab) if rx.match(i) else i for i in list1]

它规定:

代码语言:javascript
复制
['abcd', '-1234', 'Level-2 (2):', '-31%', 'others', '-3102.2%']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56357093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档