例子:

r="\\%4l\\%(wit.*wit\\)\\|\\%8l\\%(rood.*rood\\)\\|\\%12l\\%(blauw.*blauw\\)\\|\\%13l\\%(wit.*wit\\)\\|\\%14l\\%(blauw.*blauw\\)\\|\\%15l\\%(wit.*wit\\)\\|\\%16l\\%(wit.*wit\\)\\|\\%17l\\%(rood.*rood\\)\\|\\%19l\\%(wit.*wit\\)\\|\\%21l\\%(blauw.*blauw\\)"

我想将字符串拆分为一个列表,但不是使用1个参数而是使用2个参数。
首先,我想在l\\%(
其次,我想捕获\\%(\\)\\|之间的文本,或者
如果字符串的结尾在\\%(\\)$之间
输出:
[[4, "wit.*wit"], [8, "rood.*rood"], [12, "blauw.*blauw"], [13, "wit.*wit"], [14, "blauw.*blauw"], [15, "wit.*wit"], [16,"wit.*wit"], [17, "rood.*rood"], [19, "wit.*wit"], [21, "blauw.*blauw"]]

我试图在\\|处分割字符串,而不是用""替换所有不需要的字符。
在python中有更好的方法吗?

最佳答案

一种方法是将re.findall()与两个捕获组一起使用,以找到所需的对:

In [3]: re.findall(r"%(\d+)l\\%\((.*?)\\\)", r)
Out[3]:
[('4', 'wit.*wit'),
 ('8', 'rood.*rood'),
 ('12', 'blauw.*blauw'),
 ('13', 'wit.*wit'),
 ('14', 'blauw.*blauw'),
 ('15', 'wit.*wit'),
 ('16', 'wit.*wit'),
 ('17', 'rood.*rood'),
 ('19', 'wit.*wit'),
 ('21', 'blauw.*blauw')]

09-28 06:46