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)