Python:拆分字符串,尊重并保留引号
使用python,我希望拆分以下字符串:Python:拆分字符串,尊重并保留引号,python,split,shlex,Python,Split,Shlex,使用python,我希望拆分以下字符串: a=foo, b=bar, c="foo, bar", d=false, e="false" 这将导致以下列表: ['a=foo', 'b=bar', 'c="foo, bar"', 'd=false', 'e="false'"'] 在posix模式下使用shlex并用“,”拆分时,c的参数得到正确处理。但是,它会删除引号。我需要它们,因为false与不同,例如,“false” 到目前为止,我的代码是: import shlex mystring
a=foo, b=bar, c="foo, bar", d=false, e="false"
这将导致以下列表:
['a=foo', 'b=bar', 'c="foo, bar"', 'd=false', 'e="false'"']
在posix模式下使用shlex并用“,”拆分时,c
的参数得到正确处理。但是,它会删除引号。我需要它们,因为false
与不同,例如,“false”
到目前为止,我的代码是:
import shlex
mystring = 'a=foo, b=bar, c="foo, bar", d=false, e="false"'
splitter = shlex.shlex(mystring, posix=True)
splitter.whitespace += ','
splitter.whitespace_split = True
print list(splitter) # ['a=foo', 'b=bar', 'c=foo, bar', 'd=false', 'e=false']
“[^”]*”
匹配一个简单的带引号的字符串“(?:\\.[^”])*”
匹配带引号的字符串并跳过转义引号,因为\.
使用两个字符:反斜杠和任意字符[^\s,”]
匹配非分隔符(?:|)+
中的模式2和3组合在一起将匹配一系列非分隔符和带引号的字符串,这是所需的结果Regex可以很容易地解决这个问题:
import re
mystring = 'a=foo, b=bar, c="foo, bar", d=false, e="false"'
splitString = re.split(',?\s(?=\w+=)',mystring)
这里的正则表达式模式寻找一个空格,后跟一个单词字符,然后是一个等号,它可以根据需要拆分字符串并保留任何引号。引号中是否可以有(转义)引号?是的,可以(用反斜杠转义)。我相信这是的副本,它提供了一个更好的答案。(使用
shlex.split()
)这不是重复的,因为shlex.split
无法指定定界符。我同意RNA。要使用自定义定界符,请参见“谢谢”,它就像一个符咒!解释它是如何工作的,我将upvote@JasonS我同意,但有一个有用的解释部分可能会有所帮助,例如:这是有用的,但这不是重点,重点是一个好的答案解释ns为什么它会起作用。@JasonS补充了一些解释。这会分裂出公平点。我想这就是正则表达式的问题所在,写一些不太明确的东西似乎总是会让你遇到意想不到的情况,而明确的正则表达式读起来甚至很难理解到底发生了什么。
import re
mystring = 'a=foo, b=bar, c="foo, bar", d=false, e="false"'
splitString = re.split(',?\s(?=\w+=)',mystring)