python - 在多个分隔符上拆分字符串,但不单独在空格上
问题描述
我正在做
delimiters = [r'\r\n', r'\.\.\.', r'\W']
pattern = regex.compile(r'(' + r'|'.join(delimiters) + r')', flags=regex.V1)
pattern.split(s)
在多个分隔符上拆分s
(使用括号在输出中保留分隔符)。
当它单独发生时,如何防止在空白处分裂?例如,
'abc, def , geh,, , ijk lmn \n opq'
应该给
`['abc', ', ', 'def', ' , ', 'geh', ',, , ', 'ijk lmn', ' \n ', 'opq']
也就是说,当空白与另一个分隔符一起出现时,应该执行拆分,但当标记之间只有空白时则不执行。空格我真的只是指空格'',而不是任何其他标记,例如换行符.s
(这实际上是两个问题,正如我现在得到['abc', ',', '', ' ', 'def', ' ', 'geh']
的那样,即多个分隔符分别出来,而我希望它们聚合出来。)
解决方案
使用regex
模块,您可以使用:
import regex
arr = ['abc,, def', 'abc, def geh', 'abc def', 'abc, def , geh,, , ijk lmn \n opq']
res = [regex.split(r'\b(?=\W)(?! +\b)|(?<=\b\W*[^\w ]+\W*\b)',x) for x in arr]
print(res)
印刷:
[['abc', ',, ', 'def'], ['abc', ', ', 'def geh'], ['abc def'], ['abc', ', ', 'def', ' , ', 'geh', ',, , ', 'ijk lmn', ' \n ', 'opq']]
模式匹配:
\b
- 单词边界。(?=\W)
- 非单词字符的积极前瞻。(?!\s\b)
- 空格字符和单词边界的负前瞻。|
- 或者(?<=\b\W*[^\w\s]+\W*\b)
- 对单词边界、零个或多个非单词字符、至少一个除单词字符或空白字符以外的字符进行正向回溯,如果可能,后跟(贪婪的)非单词字符和单词边界。
推荐阅读
- angular - 由于编译错误,无法编译入口点 angular-font-awesome (es2015 as esm2015) 中的错误
- javascript - 调用一个组件时获得两个组件
- sql - 通过 SQL 服务器在肥皂服务上的 HTTP 与 HTTPS 问题
- java - 奇怪的摆动边框神器
- java - 在活动之间失去意图额外
- c++ - 打开 macOS finder 以搜索文件并使用 C++ 将所选文件作为字符串返回
- sqlite - 将锁定的 SQLite DB 读入内存
- go - Golang 类型切换需要(冗余)类型断言
- kubernetes - 从自定义 K8s prometheus 导出器中删除默认变量
- ios - 无法在 IOS 模拟器上运行 expo