簡體   English   中英

re.split在python中使用空格

[英]re.split with spaces in python

我有一串文字,如下所示:

'                     19,301         14,856        18,554'

空間在哪里。

我正在嘗試將其拆分為空白區域,但我需要將所有空白區域保留為新列表中的項目。 像這樣:

['                     ', '19,301','        ', '14,856', '        ', '18,554']

我一直在使用以下代碼:

re.split(r'( +)(?=[0-9])', item)

它返回:

['', '                     ', '19,301', '        ', '14,856', '        ', '18,554']

請注意,它總是在列表的開頭添加一個空元素 刪除它很容易,但我真的很想了解這里發生了什么,所以我可以得到代碼來一致地處理事情。 謝謝。

使用re.split方法時,如果捕獲組在字符串的開頭匹配,則“ 結果將以空字符串開頭 ”。 這樣做的原因是join方法可以表現為split方法的反轉。

對於您的情況,它可能沒有多大意義,其中分隔符匹配的大小各不相同,但是如果您考慮分隔符為| 你希望對它們進行連接,並使用額外的空字符串:

>> item = '|19,301|14,856|18,554'
>> items = re.split(r'\|', item)
>> print items
['', '19,301', '14,856', '18,554']
>> '|'.join(items)
'|19,301|14,856|18,554'

但沒有它,初始管道將丟失:

>> items = ['19,301', '14,856', '18,554']
>> '|'.join(items)
'19,301|14,856|18,554'

你可以用re.findall()來做到這re.findall()

>>> s = '\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s19,301\s\s\s\s\s\s\s\s\s14,856\s\s\s\s\s\s\s\s18,554'.replace('\\s',' ')
>>> re.findall(r' +|[^ ]+', s)
['                     ', '19,301', '         ', '14,856', '        ', '18,554']

你在問題中說“空間”,所以模式適用於空間。 對於任何空格字符的匹配運行,您可以使用:

>>> re.findall(r'\s+|\S+', s)
['                     ', '19,301', '         ', '14,856', '        ', '18,554']

該模式匹配一​​個或多個空白字符一個或多個非空白字符,例如:

>>> s='  \t\t  ab\ncd\tef   g '
>>> re.findall(r'\s+|\S+', s)
['  \t\t  ', 'ab', '\n', 'cd', '\t', 'ef', '   ', 'g', ' ']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM