2014-11-05 71 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']