Печать слов из текста

#python #regex #text

Вопрос:

Я создал эту программу на Python для печати слов из текста, но я застрял там, где Python достигает следующего индекса «вкладки», он возвращается к исходному, когда проверяет условие, и я не знаю, почему, так может ли кто-нибудь объяснить мне, почему он не принимает новый индекс «вкладки»?

 import re

initial_text = '@ Traditionally, a text is understood to be a piece of written or spoken material in its primary form (as opposed to a paraphrase or summary). A text is any stretch of language that can be understood in context. It may be as simple as 1-2 words (such as a stop sign) or as complex as a novel. Any sequence of sentences that belong together can be considered a text.'
text = re.sub('W ', ' ', initial_text)
t = -1
for i in text:
    n = text.find(i)
    if i == ' ':
         print(text[t 1:n])
         t = n
 

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

1. не могли бы вы опубликовать полный код, включая «текст»?

2. Что такое текст и tab индекс ? Пожалуйста, немного объясните свой вопрос

3. Символ табуляции — «t», если это то, что вы ищете

4. Вы хотите получить слова из текста ?

5. @Prakhar да, именно так.

Ответ №1:

Это связано с тем, что вы используете find() функцию, она вернет номер индекса первого вхождения слова, которое вы ищете, поэтому оно снова переходит к первому индексу.

Вы можете обратиться к find() документации по функциям.

Ответ №2:

Используйте этот подход

 import re

initial_text = "whatever your text is"
text = re.sub(r'[^ws]', '', initial_text)

words_list = text.split()
for word in words:
    print(word)
 

Объяснение на примере :

 import re

initial_text = "Hello : David welcome to Stack ! overflow"
text = re.sub(r'[^ws]', '', initial_text)

 

Вышеприведенный фрагмент удаляет знаки препинания

 words_list = text.split()
 

words_list после этого шага будет : [«Привет», «Дэвид», «добро пожаловать», «кому», «Стек», «переполнение»]

 for word in words_list:
    print(word)
 

Приведенный выше код берет каждый элемент из списка и печатает его.

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

1. О, да, я забыл этот метод. Спасибо вам за вашу помощь.

2. Но могу ли я распечатать их, не сохраняя в списке? потому что это что-то дополнительное.

3. Это самый простой и стандартный подход для извлечения слов из строки в Python. А использование списка-это additional в каком смысле ?

4. не могли бы вы, пожалуйста, объяснить этот шаблон r'[^ws]’ и как он удаляет знаки препинания в другом слове, что это значит? и в чем разница между ним и «W » и » [^A-za-z0-9] «.

Ответ №3:

Похоже, вы можете использовать

 import re

initial_text = '@ Traditionally, a text is understood to be a piece of written or spoken material in its primary form (as opposed to a paraphrase or summary). A text is any stretch of language that can be understood in context. It may be as simple as 1-2 words (such as a stop sign) or as complex as a novel. Any sequence of sentences that belong together can be considered a text.'
words = re.findall(r'[^W_] ', initial_text)
for word in words:
    print(word)
 

См. Доказательство Python.

re.findall извлекает все неперекрывающиеся совпадения из данного текста.

[^W_] это регулярное выражение, которое соответствует одному или нескольким символам, отличным от не-слов и подчеркиваний, и это означает, что оно соответствует подстрокам, состоящим только из цифр или/и букв (все, ASCII и другие символы Юникода).

См.Доказательство регулярного выражения.

объяснение

   [^W_]                   any character except: non-word characters
                           (all but a-z, A-Z, 0-9, _), '_' (1 or more
                           times (matching the most amount possible))