split () не дает ожидаемых результатов - PullRequest
0 голосов
/ 21 января 2020

У меня проблема с python split, из-за которой я не могу понять, чего мне не хватает, что приводит к тому, что функция split не работает должным образом. Раньше я использовал подобные сплиты, и они работали просто отлично.

content=open(file).read)()
Sep = content.split(r'Document [a-zA-Z0-9]{25}\n')

Файл, который я читаю, очень прост:

"I like coffee.

Document CLASSAR020181030eeat0000l

I like tea as well.

Document CLASSAR020181030eeat0000l

I like both coffee and tea."

Ответы [ 2 ]

3 голосов
/ 21 января 2020

str.split() разделяется с использованием фиксированного разделителя, а не регулярного выражения. Вам нужно использовать re.split().

import re
sep = re.split(r'Document [a-zA-Z0-9]{25}\n', content)
0 голосов
/ 21 января 2020

Ошибка - синтаксис регулярного выражения для строковых методов

content - строка. Вы не можете вызвать метод split для этой переменной, так как он вызовет метод на основе string, который ожидает разделитель. Этот разделитель должен быть фиксированной строкой, а не регулярным выражением.

Решение - использовать модуль re *

Вместо этого вы можете использовать методы в модуле регулярного выражения, так как вы используете синтаксис регулярного выражения. :

import re

with open(file, 'r') as fp:
    content = fp.read()

pattern = re.compile(r'Document \w{25}\n')
separated = pattern.split(content)
  • Блок with - это просто лучшая практика для открытия файлов в python. Это контекстный менеджер, который автоматически закрывает ваш файл, когда вы закончите. Вы можете столкнуться с проблемами в будущем, если не будете использовать это.

  • Регулярное выражение, которое я использовал, немного отличается от вашего. Это делает то же самое. Тем не менее, \w это сокращение от [a-zA-Z0-9]. То есть он соответствует любому алфавитному символу c.

  • Мы снова используем метод split. Однако этот метод разделения является частью модуля re, а не string, поскольку наша переменная pattern является объектом re.
...