我有一个由许多赋值语句组成的字符串,如下所示。我想把它们分开。所以我想出了regexre.findall(r's\d+\.([^=]+)=([^;]+);', string)
s9.allowUpload=null;s9.analyse=null;s9.description=null;s9.fillblankType=null;s9.gmtCreate=1551272584901;s9.gmtModified=1577668049380;
它就像
[('allowUpload', 'null'), ('analyse', 'null'), ('description', 'null'), ('fillblankType', 'null'), ('gmtCreate', '1551272584901'), ('gmtModified', '1577668049380')]
一切都很顺利,直到我遇到一个值,该值也包含分号,如下面的s9.optionsDetail
s9.type=-1;s9.optionDtos=s42;s9.optionsDetail="[{\"content\":\"<p><span style=\\\"font-size:16px;font-family: \'Calibri\',sans-serif;\\\" >j*m+i</span></p>\"}]";
您可以使用alternation来匹配从
["
到"]
的字符,或者使用(?:"\[.*?\]"|[^;]+)
匹配除;
之外的任何字符关于交替
(?:
非捕获组"\[.*?\]"
从["
到第一次出现"]
的匹配|
或[^;]+
匹配除;
之外的任何字符的1+倍)
关闭组Regex demo
@第四只鸟的答案使用了
optionsDetail
值的规则性,它不能根本解决字符串中出现的分号。以下是一个例子:我想到了使用
s133.
分割字符串的想法,这可以通过regex(s\d+\.)
获得。然后我会得到一个列表,如在丢弃第一个元素和每个元素末尾的
;
之后,在第一次出现=
时使用split("=", 1)
进行拆分就可以了这种方法有一个明显的缺点,当
s133.
看起来像s133.plainTextTitle="s133.plainTextTitle"
时,它会得到错误的结果。但我认为这种情况很少发生相关问题 更多 >
编程相关推荐