[英]how to parse a string using regex?
我正在嘗試解析以下字符串
s1 = """ "foo","bar", "foo,bar" """
而我希望這種解析是...
List ["foo","bar","foo,bar"] length 3
我可以解析以下內容
s2 = """ "foo","bar", 'foo,bar' """
通過使用以下模式
pattern = "(('[^']*')|([^,]+))"
re.findall(pattern,s2)
gives [('foo', '', 'foo'), ('bar', '', 'bar'), ("'foo,bar'", "'foo,bar'", '')]
但是我無法弄清楚s2的模式。請注意,我需要同時解析s1和s2
Edit
The current pattern support strings like
"foo,bar,foo bar" => [foo,bar,foo bar]
"foo,bar,'foo bar'" => ["foo","bar",'foo bar']
"foo,bar,'foo, bar'" => [foo,bar, 'foo, bar'] #length 3
我認為shlex
( 簡單詞法分析 )在這里更簡單(當regex
太復雜時)。 具體來說,我會使用:
>>> import shlex
>>> lex = shlex.shlex(""" "foo","bar", 'foo,bar' """, posix=True)
>>> lex.whitespace = ',' # Only comma will be a splitter
>>> lex.whitespace_split=True # Split by any delimiter defined in whitespace
>>> list(lex) # It is actually an generator
['foo', 'bar', 'foo,bar']
編輯:
我有一種感覺,您正在嘗試讀取csv文件。 您嘗試import csv
嗎?
也許您可以使用如下所示的內容:
>>> re.findall(r'["|\'](.*?)["|\']', s1)
['foo', 'bar', 'foo,bar']
>>> re.findall(r'["|\'](.*?)["|\']', s2)
['foo', 'bar', 'foo,bar']
這個發現所有的話里面"..."
或'...'
,並將它們分組。
這有效:
(?:"([^"]+)"|'([^']+)')
捕獲組1 或 2包含所需的輸出。 所以每個元素可能是$1$2
,因為恰好一個元素總是空的。
更新為新要求,如對Haidro的答案的評論:
(?:("[^"]+")|('[^']+')|(\w+))
現在每個元素為$1$2$3
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.