2014-11-05 46 views
1

这里就是我想我怎么拆不删除分隔符,如果它是空白

split('number1+number2') 
-->['number1', '+', 'number2'] 

split('number1 * number2') 
-->['number1', '*', 'number2'] 

我想开*,+和分裂 - ,但留住他们。所以我试图做re.split('(\W+)', mystring),它工作,但它也保留了空格。我该怎么办?

+0

结合地图重新似乎确实快于任何纯粹的正则表达式的解决方案'图(str.strip, re.split('([\ * \ - \ +])',s)' – 2014-11-05 10:54:42

回答

1

[^\w\s]匹配的字符既不是单词字符,也没有空格,所以你可以使用

>>> re.split(r"\s*([^\w\s]+)\s*",'number1 * number2') 
['number1', '*', 'number2'] 

,或者作为一个详细的正则表达式:

re.split(
    r"""\s* # Match (but don't capture) optional whitespace characters 
    (  # Capture... 
    [^\w\s]+ # one or more non-whitespace, non-alphanumeric characters 
    )   # End of capturing group 
    \s*  # Match (but don't capture) optional whitespace characters""", 
    'number1 * number2', flags=re.VERBOSE) 
0

你可以简单地使用re.findall

>>> s1 = 'number1+number2' 
>>> s2 = 'number1 * number2' 
>>> s3 = 'number1 * number2*number3- foo -bar' 
>>> r = re.compile(r'\w+|[*+-]') 
>>> r.findall(s1) 
['number1', '+', 'number2'] 
>>> r.findall(s2) 
['number1', '*', 'number2'] 
>>> r.findall(s3) 
['number1', '*', 'number2', '*', 'number3', '-', 'foo', '-', 'bar'] 
1
In [13]: import re 

In [14]: re.split(r'\s*([*+-])\s*',s) 
Out[14]: ['number1', '*', 'number2'] 

In [15]: re.split(r'\s*([*+-])\s*','number1 * number2') 
Out[15]: ['number1', '*', 'number2'] 

In [16]: re.split(r'\s*([*+-])\s*','number1+number2') 
Out[16]: ['number1', '+', 'number2' 
0

可以使用ungreedy匹配:

re.split("\s*(\W+?]+)\s*",'number1 * number2') 

给出正确['number1', '*', 'number2']