Python: разделить строку с несколькими разделителями [дубликат]
этот вопрос уже есть ответ здесь:
- Разделить строки с несколькими разделителями? 29 ответов
Я нашел некоторые ответы в интернете, но у меня нет опыта работы с регулярными выражениями, что я считаю, что здесь необходима.
у меня есть строка, которая должна быть разделена либо на '; 'или', ' То есть, это должно быть либо после запятой или запятой с пробелом. Отдельные запятые без конечных пробелов должны быть оставлены нетронутыми
пример:
"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]')
5 ответов:
к счастью, Python имеет этот встроенный:)
import re re.split('; |, ',str)
обновление:
после вашего комментария:>>> a='Beautiful, is; better*than\nugly' >>> import re >>> re.split('; |, |\*|\n',a) ['Beautiful', 'is', 'better', 'than', 'ugly']
вот безопасный способ для любой итерации разделителей, используя регулярные выражения:
>>> 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.побег позволяет построить шаблон автоматически и иметь разделители экранированы красиво.
вот это решение как функция для вашего удовольствия от копирования:
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']