在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添加了一些解释。