在Python中用符号分隔单词/数字

时间:2015-02-19 17:09:05

标签: python regex

在python 2中,我想取一个字符串,并将其存储在一个数组中,分隔符是从单词/数字到符号以及空格的变化,反之亦然。希望能够做到这一点的功能。例如:

"54 3 'hello world' 5+4"

将返回

["54", "3", "'hello world'", "5", "+", "4"] 

我已经使用re.findall(r"[\w']+", text)来获取所有单词/数字的列表,但是在解决这些符号时我会陷入困境。

3 个答案:

答案 0 :(得分:2)

import re
x="""54 3 'hello world' 5+4"""
print [x for x in re.split(r"[ ](?![^']*'(?:[^']*'[^']*')*[^']*$)|([+*-])",x) if x]

您可以通过re module尝试此操作。

答案 1 :(得分:2)

您可以使用下面的解决方法,但未指定所有可能的符号。

>>> import re
>>> s = "54 3 'hello world' 5+4"
>>> re.findall(r"('[^']*'|\w+|[^\w\s]+)", s)
['54', '3', "'hello world'", '5', '+', '4']

更严格的做法是:

>>> re.findall(r"('[^']*'|[a-z0-9]+|[^a-z0-9\s]+)", s, re.I)

答案 2 :(得分:2)

您可以使用以下模式进行拆分:

>>> [i for i in re.split(r'(?<![a-zA-Z]) |([\+\-\*\\])',s) if i]
['54', '3', "'hello world'", '5', '+', '4']

(?<![a-zA-Z])是基于不在任何单词字符前面的空格分割的negative look behind