#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)
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))