這裏就是我想我怎麼拆不刪除分隔符,如果它是空白
split('number1+number2')
-->['number1', '+', 'number2']
和
split('number1 * number2')
-->['number1', '*', 'number2']
我想開*,+和分裂 - ,但留住他們。所以我試圖做re.split('(\W+)', mystring)
,它工作,但它也保留了空格。我該怎麼辦?
這裏就是我想我怎麼拆不刪除分隔符,如果它是空白
split('number1+number2')
-->['number1', '+', 'number2']
和
split('number1 * number2')
-->['number1', '*', 'number2']
我想開*,+和分裂 - ,但留住他們。所以我試圖做re.split('(\W+)', mystring)
,它工作,但它也保留了空格。我該怎麼辦?
[^\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)
你可以簡單地使用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']
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'
可以使用ungreedy匹配:
re.split("\s*(\W+?]+)\s*",'number1 * number2')
給出正確['number1', '*', 'number2']
結合地圖重新似乎確實快於任何純粹的正則表達式的解決方案'圖(str.strip, re.split('([\ * \ - \ +])',s)' – 2014-11-05 10:54:42