在python中,按该字符在另一个字符之前的最后一次出现来分析字符串
我有以下字符串,需要以正确的方式拆分为较小的字符串:在python中,按该字符在另一个字符之前的最后一次出现来分析字符串,python,string,Python,String,我有以下字符串,需要以正确的方式拆分为较小的字符串: s=“A=3,B=1值,2值,3值,C=NA,D=其他机构,保险除外,id=DRT\U 12345” 我无法执行以下操作,因为我只需要在最后一个“=”之前进行拆分 s.split(“,”) 我期望的结果如下: out=[“A=3”, “B=值一、值二、值三”, “C=NA”, “D=其他机构,保险除外”, “id=DRT_12345”] 按照字符串的结构,可以使用re.findall: import re re.findall(r'\S
s=“A=3,B=1值,2值,3值,C=NA,D=其他机构,保险除外,id=DRT\U 12345”
我无法执行以下操作,因为我只需要在最后一个“=”之前进行拆分
s.split(“,”)
我期望的结果如下:
out=[“A=3”,
“B=值一、值二、值三”,
“C=NA”,
“D=其他机构,保险除外”,
“id=DRT_12345”]
按照字符串的结构,可以使用re.findall
:
import re
re.findall(r'\S+=.*?(?=, \S+=|$)', s)
模式使用前瞻来确定何时停止匹配当前键值对
\S+ # match or more non-whitespace characters
= # ...followed by an equal sign
.*? # match anything upto...
(?= # regex lookahead for
, # comma, followed by
\s # a whitespace, followed by
\S+ # the same pattern
=
| # OR
$ # EOL
)
按照字符串的结构,可以使用
re.findall
:
import re
re.findall(r'\S+=.*?(?=, \S+=|$)', s)
模式使用前瞻来确定何时停止匹配当前键值对
\S+ # match or more non-whitespace characters
= # ...followed by an equal sign
.*? # match anything upto...
(?= # regex lookahead for
, # comma, followed by
\s # a whitespace, followed by
\S+ # the same pattern
=
| # OR
$ # EOL
)
“等号前的最后一个逗号”上的拆分可以转换为如下正则表达式:
import re
out = re.split(r',(?=[^,]*=)', s)
这是一个逗号(,
),后跟任何数量的非逗号字符([^,]*
),然后是一个等号(=
)。拆分为“等号之前的最后一个逗号”可以转换为如下正则表达式:
import re
out = re.split(r',(?=[^,]*=)', s)
这是一个逗号(
,
),后跟(正向前瞻-(?=…)
)任何数量的非逗号字符([^,]*
),然后是等号(=
)。,这几乎是不明确的。我建议在语言中添加引号或转义符以避免问题,然后使用真正的解析器。这几乎是模棱两可的。我建议在语言中添加引号或转义符以避免出现问题,然后使用真正的解析器。'\S+=.*(?=,\S+=|$)'正则表达式如何工作?@Rfreak添加了一些解释。'\S+=.*(?=,\S+=|$)正则表达式如何工作?@Rfreak添加了一些解释。