Python:从字符串中过滤正整数和负整数

时间:2017-03-12 17:58:27

标签: python regex python-3.x math list-comprehension

Python 3: 给定一个字符串(一个等式),返回一个正整数和负整数的列表。 我尝试了各种正则表达式和列表解析解决方案无济于事。

给出等式4 + 3x或-5 + 2y或-7y-2x 返回:[4,3],[ - 5,2],[ - 7,-2]

输入

str = '-7y-2x'

输出

my_list = [-7, -2]

3 个答案:

答案 0 :(得分:6)

使用re.findall函数的简单解决方案:

import re

s = '-5+2y'
result = [int(d) for d in re.findall(r'-?\d+', s)]

print(result)

输出:

[-5, 2]

-?\d+ - 匹配正整数和负整数

  

原始字符串表示法(r"text")使正则表达式保持正常。   没有它,正则表达式中的每个反斜杠(' \')都会有   以另一个为前缀来逃避它

答案 1 :(得分:4)

这个正则表达式可以解决你的问题。

[\+\-]?[0-9]+

此外,这里有一些代码。

import re
regex = re.compile(r'[\+\-]?[0-9]+')
nums = [int(k) for k in regex.findall('5-21x')]

答案 2 :(得分:0)

这是更完整的答案,但保留字母。

ss='5 a 2b -13 c2 d2e 111 5.2 .3 1.4x 2223.'

删除整数和负数(即使在字符串的开头)

ss1= re.sub(r"(^|\s)-?(\d+)\.?(\d*)(\s)", " ", ss)

>>' a 2b c2 d2f 5.2 .3 1.4x 2223.'

删除十进制数字

ss2= re.sub("(^||\d+)\.(\d+) ",'',ss1)

>> ' a 2b c2 d2e 1.4x 2223.'

用。删除句子末尾的数字。

ss3= re.sub("[0-9+]\.?(\d+)(\.)",' ',ss2)

>> ' a 2b c2 d2e 1.4x '

删除字符串末尾的数字

ss4= re.sub("[0-9+]\.?(\d+)($)",' ',ss3)

>> ' a 2b c2 d2e 1.4x '