Python:分割字符串与多个分隔符
我在网上找到了一些答案,但我没有正则表达式的经验,我相信这是在这里需要的。
我有一个字符串,需要拆分';' 或','也就是说,它必须是分号或逗号,后面跟一个空格。 没有尾随空格的单个逗号应该保持不变
示例字符串:
"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]')
幸运的是,Python有这个内置的:)
import re re.split('; |, ',str)
更新:
在您的评论之后:
>>> a='Beautiful, is; better*than\nugly' >>> import re >>> re.split('; |, |\*|\n',a) ['Beautiful', 'is', 'better', 'than', 'ugly']
做一个str.replace('; ', ', ')
,然后是一个str.split(', ')
对于任何可迭代的分隔符,使用正则表达式是一个安全的方法:
>>> import re >>> delimiters = "a", "...", "(c)" >>> example = "stackoverflow (c) is awesome... isn't it?" >>> regexPattern = '|'.join(map(re.escape, delimiters)) >>> regexPattern 'a|\\.\\.\\.|\\(c\\)' >>> re.split(regexPattern, example) ['st', 'ckoverflow ', ' is ', 'wesome', " isn't it?"]
re.escape允许自动构建模式并使分隔符很好地逃脱。
这个解决方案作为您复制粘贴乐趣的功能:
def split(delimiters, string, maxsplit=0): import re regexPattern = '|'.join(map(re.escape, delimiters)) return re.split(regexPattern, string, maxsplit)
如果你打算经常使用相同的分隔符分割,像所描述的那样事先编译你的正则表达式,并使用RegexObject.split
。
为了回应乔纳森的回答,这似乎只适用于某些分隔符。 例如:
>>> a='Beautiful, is; better*than\nugly' >>> import re >>> re.split('; |, |\*|\n',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']
这是正则表达式的样子:
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)