在 Python 中使用多个分隔符拆分字符串[重复]
- 2024-11-29 08:42:00
- admin 原创
- 126
问题描述:
我在网上找到了一些答案,但我没有正则表达式的经验,我相信这是这里所需要的。
我有一个字符串需要用“;”或“,”分隔,也就是说,它必须是分号或逗号后跟一个空格。没有尾随空格的单个逗号应该保持不变
示例字符串:
"b-staged divinylsiloxane-bis-benzocyclobutene [124221-30-3], mesitylene [000108-67-8]; polymerized 1,2-dihydro-2,2,4- trimethyl quinoline [026780-96-1]"
应拆分为包含以下内容的列表:
('b-staged divinylsiloxane-bis-benzocyclobutene [124221-30-3]' , 'mesitylene [000108-67-8]', 'polymerized 1,2-dihydro-2,2,4- trimethyl quinoline [026780-96-1]')
解决方案 1:
幸运的是,Python 有这个内置功能 :)
import re
# Regex pattern splits on substrings "; " and ", "
re.split('; |, ', string_to_split)
更新:
根据您的评论:
>>> string_to_split = 'Beautiful, is; better*than
ugly'
>>> import re
>>> re.split('; |, |*|
', string_to_split)
['Beautiful', 'is', 'better', 'than', 'ugly']
解决方案 2:
先做一个str.replace('; ', ', ')
,再做一个str.split(', ')
解决方案 3:
对于任何可迭代的分隔符,这是一种使用正则表达式的安全方法:
>>> import re
>>> delimiters = "a", "...", "(c)"
>>> example = "stackoverflow (c) is awesome... isn't it?"
>>> regex_pattern = '|'.join(map(re.escape, delimiters))
>>> regex_pattern
'a|\\.\\.\\.|\\(c\\)'
>>> re.split(regex_pattern, example)
['st', 'ckoverflow ', ' is ', 'wesome', " isn't it?"]
re.escape允许自动构建模式并很好地转义分隔符。
以下是此解决方案的功能,方便您复制粘贴:
def split(delimiters, string, maxsplit=0):
import re
regex_pattern = '|'.join(map(re.escape, delimiters))
return re.split(regex_pattern, string, maxsplit)
如果您经常使用相同的分隔符进行拆分,请按照说明预先编译正则表达式并使用RegexObject.split
。
如果您希望保留字符串中的原始分隔符,则可以将正则表达式更改为使用后发断言:
>>> import re
>>> delimiters = "a", "...", "(c)"
>>> example = "stackoverflow (c) is awesome... isn't it?"
>>> regex_pattern = '|'.join('(?<={})'.format(re.escape(delim)) for delim in delimiters)
>>> regex_pattern
'(?<=a)|(?<=\\.\\.\\.)|(?<=\\(c\\))'
>>> re.split(regex_pattern, example)
['sta', 'ckoverflow (c)', ' is a', 'wesome...', " isn't it?"]
(替换?<=
为?=
将分隔符附加到右侧,而不是左侧)
解决方案 4:
针对 Jonathan 的上述回答,这似乎只对某些分隔符有效。例如:
>>> a='Beautiful, is; better*than
ugly'
>>> import re
>>> re.split('; |, |*|
',a)
['Beautiful', 'is', 'better', 'than', 'ugly']
>>> b='1999-05-03 10:37:00'
>>> re.split('- :', b)
['1999-05-03 10:37:00']
将分隔符放在方括号中似乎可以更有效地工作。
>>> re.split('[- :]', b)
['1999', '05', '03', '10', '37', '00']
解决方案 5:
正则表达式如下所示:
import re
# "semicolon or (a comma followed by a space)"
pattern = re.compile(r";|, ")
# "(semicolon or a comma) followed by a space"
pattern = re.compile(r"[;,] ")
print pattern.split(text)
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
热门标签
云禅道AD