如何使用 2 个拆分参数拆分字符串?

Posted

技术标签:

【中文标题】如何使用 2 个拆分参数拆分字符串?【英文标题】:How to split up a string using 2 split parameters? 【发布时间】:2017-06-22 13:54:40 【问题描述】:

例子:

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 中做到这一点?

【问题讨论】:

【参考方案1】:

一种方法是使用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')]

【讨论】:

很好的解决方案。谢谢你。只是一件事.. .* 之间可能有超过 1 个“()”,这就是为什么我要捕获 \\%(\\)\\| 之间的文本,或者如果 \\%( 和 @ 之间的字符串结尾987654327@。在您的正则表达式中,它介于 \\%(\\) @Reman 谢谢,你能给我一个示例字符串吗?我认为可以用\(+量词解决,但想先测试一下。 当然.. 示例字符串\%4l\%(wit\(.*\)wit\)\|\%8l\%(\(rood.*rood\)\)\|\%12l\%(blauw.*blauw\) 我只是想确保选择正确的\)。希望我说清楚了 :) 但是我想我已经找到了解决方案.. regex.findall(r"%(\d+)l\\%\((.*?)\\\)(?=\\\||$)", r)【参考方案2】:

findall() 可能是最好的解决方案。

这是一个相对较短的方法,用 2 个拆分且不替换:

string = 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\)"

pairs = [substring[2:-2].split(r"l\%(") for substring in string.split(r"\|")]
# [['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']]

【讨论】:

以上是关于如何使用 2 个拆分参数拆分字符串?的主要内容,如果未能解决你的问题,请参考以下文章

使用2个字符拆分字符串

如何拆分 2 个字符串并插入到 2 列

如何拆分()关于多个分隔符的字符串? [复制]

如何在每 10 个单词后拆分一个字符串?

如何逐行拆分scala中的文本

如何将子字符串拆分为多个块并使用 C# 将它们输入到表中?