Разделить строку с несколькими разделителями в 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]')
Помогите, пожалуйста, с решением этой задачи, так как мне нужно составить правильное регулярное выражение.
4 ответ(ов)
К счастью, в Python есть встроенная функция для этого 😃
import re
# Шаблон регулярного выражения разбивает строку по подстрокам "; " и ", "
re.split('; |, ', string_to_split)
Обновление:
Согласно вашему комментарию:
>>> string_to_split = 'Beautiful, is; better*than\nugly'
>>> import re
>>> re.split('; |, |\*|\n', string_to_split)
['Beautiful', 'is', 'better', 'than', 'ugly']
Чтобы выполнить замену с помощью str.replace('; ', ', ')
, а затем разделить строку на элементы, используя str.split(', ')
, вы можете воспользоваться следующим примером кода на Python:
# Исходная строка
original_string = "элемент1; элемент2; элемент3"
# Сначала заменяем '; ' на ', '
replaced_string = original_string.replace('; ', ', ')
# Затем разбиваем строку по ', '
result_list = replaced_string.split(', ')
# Выводим результат
print(result_list)
В этом примере строка original_string
сначала преобразуется, заменяя все '; '
на ', '
, а затем разбивается на список элементов с помощью split(', ')
. В итоге, result_list
будет содержать список ['элемент1', 'элемент2', 'элемент3']
.
В ответ на ответ Джонатана выше, это решение, похоже, работает только для определённых разделителей. Например:
>>> 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
# "точка с запятой или (запятая, за которой следует пробел)"
pattern = re.compile(r";|, ")
# "(точка с запятой или запятая), за которой следует пробел"
pattern = re.compile(r"[;,] ")
print(pattern.split(text))
Обратите внимание, что при вызове print()
в Python 3 необходимо использовать круглые скобки.
Разделить строку по пробелам в Python
Разделение строк на слова с использованием нескольких разделителей границ слов
Есть ли в Python метод подстроки 'contains' для строк?
Объединение двух столбцов текста в DataFrame pandas
Вывод строки в текстовый файл