[英]Python re.split() on spaces while treating quoted strings atomically
[英]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.