import re re.split(pattern, string, maxsplit=0, flags=0)
pattern
- строка, шаблон регулярного выражения,string
- строка для поиска, maxsplit=0
- число, максимальное количество делений строки,flags=0
- один или несколько флагов.Функция split()
модуля re
делит строку по появлению шаблона регулярного выражения pattern
и возвращает список получившихся подстрок. Если в шаблоне используются захватывающие скобки, то текст всех групп в шаблоне также возвращается как часть результирующего списка. Если maxsplit
отличен от нуля, происходит максимальное деление строки на maxsplit
частей, а остаток строки возвращается как последний элемент списка.
Функция re.split()
неоценима для преобразования текстовых данных в структуры данных, которые могут быть легко прочитаны и изменены Python.
Например записи разделены одним или несколькими символами новой строки. Преобразуем строку в список, где каждая непустая строка имеет свою запись:
>>> text = """Ross McFluff: 834.345.1254 155 Elm Street ... ... Ronald Heathmore: 892.345.3428 436 Finley Avenue ... Frank Burger: 925.541.7625 662 South Dogwood Way ... ... ... Heather Albrecht: 548.326.4584 919 Park Place""" >>> entries = re.split("\n+", text) >>> entries # ['Ross McFluff: 834.345.1254 155 Elm Street', # 'Ronald Heathmore: 892.345.3428 436 Finley Avenue', # 'Frank Burger: 925.541.7625 662 South Dogwood Way', # 'Heather Albrecht: 548.326.4584 919 Park Place']
>>> re.split(r'\W+', 'Words, words, words.') # ['Words', 'words', 'words', ''] >>> re.split(r'(\W+)', 'Words, words, words.') # ['Words', ', ', 'words', ', ', 'words', '.', ''] >>> re.split(r'\W+', 'Words, words, words.', 1) # ['Words', 'words, words.'] >>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE) # ['0', '3', '9']
Если в разделителе есть группы захвата и он совпадает в начале строки, результат будет начинаться с пустой строки. То же самое относится и к концу строки:
>>> re.split(r'(\W+)', '...words, words...') # ['', '...', 'words', ', ', 'words', '...', '']
Таким образом, компоненты разделителя всегда находятся с одинаковыми относительными индексами в списке результатов.
Пустые совпадения для шаблона разбивают строку, только если они не соседствуют с предыдущим пустым совпадением.
>>> re.split(r'\b', 'Words, words, words.') # ['', 'Words', ', ', 'words', ', ', 'words', '.'] >>> re.split(r'\W*', '...words...') # ['', '', 'w', 'o', 'r', 'd', 's', '', ''] >>> re.split(r'(\W*)', '...words...') # ['', '...', '', '', 'w', '', 'o', '', 'r', '', 'd', '', 's', '...', '', '', '']