Разделить список несколькими разделителями

#python #list

#python #Список

Вопрос:

Если у меня есть такое предложение:

 text = "The sun shine brightly, but is very cold today!"
  

Я могу использовать разделение:

 newArray = text.split(" ")
print (newArray)   
  

Конечный результат будет:

 ['The', 'sun', 'shine', 'brightly,', 'but', 'is', 'very', 'cold', 'today!']
  

Но, если мне нужно разделить не только «пробелом», но, например, «пробелом», «запятой» и «Ввод».

Как я могу это сделать?

Чтобы было более понятно, вот мой пример кода:

 import io
from pdfminer.converter import TextConverter
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfpage import PDFPage
import re

def extract_text_from_pdf(pdf_path):
    resource_manager = PDFResourceManager()
    fake_file_handle = io.StringIO()
    converter = TextConverter(resource_manager, fake_file_handle)
    page_interpreter = PDFPageInterpreter(resource_manager, converter)
    with open(pdf_path, 'rb') as fh:
        for page in PDFPage.get_pages(fh, 
                                      caching=True,
                                      check_extractable=True):
            page_interpreter.process_page(page)
        text = fake_file_handle.getvalue()
    # close open handles
    converter.close()
    fake_file_handle.close()
    if text:
        return text


text = extract_text_from_pdf('file.pdf')
newArray = text.split(" ")
print (newArray)   
  

Ответ №1:

Вы могли бы использовать re.split для разделения по нескольким критериям:

 text = "The sun shine brightly, but is very cold today!"
  

Допустим, вы хотите разделить пробелами и запятыми:

 import re
re.split( r's |,s*', text)
# ['The', 'sun', 'shine', 'brightly', 'but', 'is', 'very', 'cold', 'today!']
  

Комментарии:

1. Опереди меня в этом,,

2. Вам действительно следует использовать необработанную строку для вашего регулярного выражения r's |,s*' иначе могут произойти странные вещи.

3. Или наоборот, используя re.find

4. Tks… Могу ли я поместить здесь свой код, чтобы люди видели, почему я это спросил?

5. Если вы знаете, где это сделать, вы всегда можете обновить вопрос и добавить код, который вы пробовали, или еще некоторые подробности @DaviAmaral

Ответ №2:

Вероятно, самым простым подходом было бы нормализовать ваши данные и заменить все «запятые» и «ввод» пробелом, затем разделить, как вы делали раньше, или использовать split() from re с s помощью meta.

Комментарии:

1. Чувак, я чувствую себя таким глупым сейчас! Идеально! Так просто, и я не думал, что!

Ответ №3:

Метод str.split() разбивает список на пробелы и преобразует в массив:

 >>> import re
>>> s = "The sun shine brightly, but is very cold today!"
>>> re.findall( r's |,s*', s)
['The', 'sun', 'shine', 'brightly', 'but', 'is', 'very', 'cold', 'today!']
  

надеюсь, вы, ребята, используете это.

Комментарии:

1. Мне нравится подход с re.findall , но имеет ли это отношение к приведенному выше предложению? Вероятно, отсутствует что-то вроде «Вместо этого вы могли бы попробовать …»