[英]Python regex split comma or space separated string
我已經顯示了我需要的輸入字符串和輸出字符串的示例。 數字和字符串可以是任意順序,並且它們可以具有任何數字或任何字符串(例如“ THIS”可以是其他字符串)
我需要以下輸出
["'5'", "'THIS'", "'/,'", "'4.2560'", "'0.34000E-01'"]
對於以下所有輸入字符串:
""" 5,'THISMORETHAN4','/,',4.2560,0.34000E-01 """
""" 5,'THIS','/,',4.2560,0.34000E-01 """
"""5 , 'THIS' , '/,' , 4.2560 , 0.34000E-01 """
""" '5' 'THIS' '/,' '4.2560' '0.34000E-01' """
""" 5,'THIS','this','/,',4.2560,0.34000E-01 """
""" 5,'THIS','/,',4.2560,0.34000E-01 """
這是先前問題的延續。
作為上一個問題的Padraic Cunningham解決方案的改進版本,正則表達式(["']).*?\\1(?<!\\\\["'])|[^\\r\\n\\t\\f ,]+
將捕獲您的所有字段。
第一部分( (["']).*?\\1(?<!\\\\["'])
))現在也可以與'asdf"'
類'asdf"'
字段一起使用,因為環繞引號必須相同。使用轉義引號,因為(?<!\\\\["'])
斷言第二個引號之前沒有反斜杠。
如果第一部分不匹配(即,引號中沒有字符串),則第二部分( [^\\r\\n\\t\\f ,]+
)匹配所有非空格或逗號。 因此它將忽略您的分隔符,但會匹配其他所有內容。
import re
rows = [""" 5,'THISMORE"THAN4','/,',4.2560,0.34000E-01 """,
# ^ added quote character here
""" 5,'TH\\'IS','/,',4.2560,0.34000E-01 """,
# ^ added escaped quote here
"""5 , 'THIS' , '/,' , 4.2560 , 0.34000E-01 """,
""" '5' 'THIS' '/,' '4.2560' '0.34000E-01' """,
""" 5,'THIS','this','/,',4.2560,0.34000E-01 """,
""" 5,'THIS','/,',4.2560,0.34000E-01 """]
pattern = re.compile(r'(["\']).*?\1(?<!\\["\'])|[^\r\n\t\f ,]+')
result = [[m.group(0).strip('"\'') for m in pattern.finditer(row)]
for row in rows]
import pprint
pprint.pprint(result)
印刷品:
[['5', 'THISMORE"THAN4', '/,', '4.2560', '0.34000E-01'],
['5', "TH\\'IS", '/,', '4.2560', '0.34000E-01'],
['5', 'THIS', '/,', '4.2560', '0.34000E-01'],
['5', 'THIS', '/,', '4.2560', '0.34000E-01'],
['5', 'THIS', 'this', '/,', '4.2560', '0.34000E-01'],
['5', 'THIS', '/,', '4.2560', '0.34000E-01']]
仍然有問題的是在引號中包含逗號分隔行中的空格的字段。 因此
'hello there, "I actually", have, 5, fields'
將導致:
['hello','there','I actually','have','5','fields']
您的數據中有嗎?
此正則表達式適用於所有測試用例
(\d)\W*\'([A-Z]{0,4})\w*\'.*(\/)\W*(\d*\.\d*)\W*(\d*\.\d*E-\d*)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.