Python如何按多个分隔符或多个分隔符组合拆分字符串?

3

输入:

x = "121, 1238,\nxyz,\n 123abc \n\rabc123"

我想要用分隔符",", "\n", "\r", "\s"来拆分这个字符串以获取输出。
['121', '1238', 'xyz', '123abc', 'abc123']

无论我尝试什么方法,分隔符都被视为单个字符而不是字符组合。 例如:
1.
re.split("\n|,|\s|\r", x)

提供输出
['121', '', '1238', '', 'xyz', '', '', '123abc', '', '', 'abc123']

  1. re.split("\n\s|,|\s|\r", x)

Gave output of

['121', '', '1238', '', 'xyz', '', '123abc', '', 'abc123']

第二个方案相比第一个有所改进,但如果需要的话,我需要手动提供所有可能的组合。
类似于以下内容(包含更多组合):
re.split("\n\s|\s\n|\s\n\s|\n|,\s|\s,|\s,\s|,|\s|\r", x)

输出:

['121', '1238', 'xyz', '', '123abc', '', 'abc123']

有没有更好的方法来做这件事?


@9769953 的输出为 ['121', '', '1238', '', 'xyz', '', '', '123abc', '', '', 'abc123'] - RatDon
4
这段代码的作用是将字符串 x 按空格和逗号分隔,并返回分隔后的子串列表。 - 001
@JohnnyMopp,您能将其添加为答案并解释发生了什么吗?没有\n\r,但它仍然如何在所有内容上拆分? - RatDon
3
好的,我会尽力完成翻译任务。以下是需要翻译的内容:@RatDon看一下这里:https://docs.python.org/3/library/re.html#regular-expression-syntax - alfinkel24
1
@RatDon 特别看一下这个 - Wasi Master
@alfinkel24 谢谢。这样就解释清楚了。 - RatDon
2个回答

3

结合@Johnny Mopp@alfinkel24的评论:

re.split("[\s,]+",  x)

将字符串按需拆分。

['121', '1238', 'xyz', '123abc', 'abc123']

解释:

  • [...] 匹配方括号内的任意一个字符。
  • + 匹配前一个字符的一次或多次重复。
  • \s 匹配包括 "\n, \r, \t" 在内的所有空白字符。

    官方文档:

\s
对于 Unicode(str)模式: 匹配 Unicode 空白字符(包括 [ \t\n\r\f\v],以及其他许多字符,例如在许多语言中强制执行的不间断空格)。如果使用 ASCII 标志,则只匹配 [ \t\n\r\f\v]。
对于 8 位(bytes)模式: 匹配 ASCII 字符集中被视为空格的字符;这相当于 [ \t\n\r\f\v]。


1

允许re.split以您指定的任何分隔符字符的1个或多个重复作为分隔符:

>>> re.split("[,\s]+", x)
['121', '1238', 'xyz', '123abc', 'abc123']

('*'、'+'和'?'限定符都是贪婪的,它们会匹配尽可能多的内容。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接