输入:
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']re.split("\n\s|,|\s|\r", x)给出输出
['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']有什么更好的方法吗?
发布于 2021-09-14 14:11:23
结合@Johnny Mopp和@alfinkel24的评论:
re.split("[\s,]+", x)将按需要将字符串拆分为
['121', '1238', 'xyz', '123abc', 'abc123']解释:
[...]以前的characters.\s中的任何一个或多个重复,任何空格字符,包括"\n, \r, \t" 正式文件:
\s
对于Unicode (str)模式:匹配Unicode空白字符(其中包括\t\n\r\f\v,以及许多其他字符,例如,许多语言中的排版规则规定的非中断空间)。如果使用ASCII标志,则只匹配\t\n\r\f\v。
对于8位(字节)模式:匹配ASCII字符集中视为空白的字符;这相当于\t\n\r\f\v.
发布于 2021-09-14 13:53:24
允许re.split将任何分隔字符的1次或多次重复作为分隔符:
>>> re.split("[,\s]+", x)
['121', '1238', 'xyz', '123abc', 'abc123'](“*”、“+”和“?”限定符都是贪婪的,它们尽可能地匹配。)
https://stackoverflow.com/questions/69178811
复制相似问题