Python 3: 给定一个字符串(一个等式),返回一个正整数和负整数的列表。 我尝试了各种正则表达式和列表解析解决方案无济于事。
给出等式4 + 3x或-5 + 2y或-7y-2x 返回:[4,3],[ - 5,2],[ - 7,-2]
输入
str = '-7y-2x'
输出
my_list = [-7, -2]
答案 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 '