如何使用 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 个拆分参数拆分字符串?的主要内容,如果未能解决你的问题,请参考以下文章