Python re.findall with *和**

时间:2015-10-18 03:34:38

标签: python

使用re.findall,是否可以在列表的同一索引中列出两个随后出现的*?

我要说str = "2**3 + 2*3"我希望列表显示为

lis = re.findall('[\+\-*/()]', str)

lis = [2, **, 3, +, 2, *, 3]

是否有像*|**这样的正则表达式?

1 个答案:

答案 0 :(得分:2)

在char类之后使用+,重复前一个标记一次或多次。

lis = re.findall(r'[-+*/()]+|\d+', string)

lis = re.findall(r'[A-Za-z\d]+|[^\w\s]+', string)

示例:

>>> s = "2**3 + 2*3"
>>> re.findall(r'[-+*/()]+|\d+', s)
['2', '**', '3', '+', '2', '*', '3']
>>> re.findall(r'[A-Za-z\d]+|[^\w\s]+', s)
['2', '**', '3', '+', '2', '*', '3']

您也可以使用re.split

>>> re.split(r'\s*([-+*/()]+)\s*', s)
['2', '**', '3', '+', '2', '*', '3']