作为this question的后续版,我有一个表达式:['(', '44', '+(', '3', '+', 'll', '))']
是使用re.findall('\w+|\W+',item)
方法创建的,但是在此字符串列表中,有两个错误。一个是' +('另一个是'))'。
是否有一种pythonic方式,我可以只拆分运算符,使列表类似于['(', '44', '+','(', '3', '+', 'll', ')',')']
。
(将数字/字母保持在一起,将符号分开)
由于
答案 0 :(得分:1)
您想要分组分组的非字母数字字符。
如果项目是ok(字母数字),我会创建一个列表项目,如果项目是一系列符号,我会创建一个字符列表。
然后,我将列表展平以获得您要求的内容
import itertools
l = ['(', '44', '+(', '3', '+', 'll', '))']
new_l = list(itertools.chain.from_iterable([x] if x.isalnum() else list(x) for x in l))
print(new_l)
结果:
['(', '44', '+', '(', '3', '+', 'll', ')', ')']
编辑:实际上你可以通过不在正则表达式中对符号进行分组来将你的2个问题链接到一个答案(调整原始问题的regex answer):
import re
lst = ['z+2-44', '4+55+((z+88))']
print([re.findall('\w+|\W', s) for s in lst])
(请注意+
之后缺少\W
)并直接获得:
[['z', '+', '2', '-', '44'], ['4', '+', '55', '+', '(', '(', 'z', '+', '88', ')', ')']]
答案 1 :(得分:1)
使用str.join()和re.split()函数的简短解决方案:
import re
l = ['(', '44', '+(', '3', '+', 'll', '))']
new_list = [i for i in re.split(r'(\d+|[a-z]+|[^\w])', ''.join(l)) if i.strip()]
print(new_list)
输出:
['(', '44', '+', '(', '3', '+', 'll', ')', ')']
答案 2 :(得分:1)
另一种方法是更改正则表达式,以便将非字母数字字符分开:
import re
lst = ['z+2-44', '4+(55+z)+88']
[re.findall('\w+|\W', s) for s in lst]
#[['z', '+', '2', '-', '44'], ['4', '+', '(', '55', '+', 'z', ')', '+', '88']]
答案 3 :(得分:1)
试试这个:
import re
lst = ['z+2-44', '4+(55+z)+88']
[re.findall('\w+|\W', s) for s in lst]
可能对其他人有帮助。