Python For-Loop с регулярным выражением - PullRequest
0 голосов
/ 06 ноября 2019

Бланк Бланк Бланк Бланк Бланк

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Функция re.findall() делает цикл по всему предложению. Вы не должны делать эту часть самостоятельно. все, что вам нужно сделать, чтобы получить желаемый результат, это сделать следующее:

import re

sentence = 'This is some Text, then some more text with some Numbers 1357,  and even more text 357, the end.'

wkar = re.findall(r'text', sentence)

, что приведет к:

['text', 'text']

и если вы хотите, чтобы re.findall() было регистромнечувствительное использование:

wkar = re.findall(r'text', sentence, flags=re.IGNORECASE)

, которое даст:

['Text', 'text', 'text']

Также в будущем, если вы хотите проверить регулярные выражения, я предлагаю вам использовать отличный https://regex101.com/ веб-сайт(убедитесь, что выбрали кнопку python для формата строки регулярного выражения python).

0 голосов
/ 06 ноября 2019

Проблема

Ваш тест, чтобы проверить, вернул ли re.findall требуемое значение, содержит ошибки. Ваш чек:

if test != None:

всегда будет верным, и вы всегда добавите любое значение word к wkar. Из документации (предполагается, что python3, но поведение не меняется):

re.findall ( pattern, string, flags = 0 )

Вернуть все неперекрывающиеся совпадения шаблона в строке, как список строк ... Пустые совпадения включены в результат .

(выделение мое)

Пустой список не None, то есть wkar содержит все значения в вашем предложении. (Интересно, что это полная противоположность поведению, которое вы упомянули в начале вашего вопроса.)

Решение

Не используйте регулярное выражение, этонеправильный инструмент для этой работы. Это можно решить с помощью встроенных функций. Кроме того, вы получаете удар по производительности за то, что можно просто сделать в операторе if

# use the builtin split function to split sentence on spaces
sentence = sentence.split(" ")

wkar = []

# iterate over each word...
for word in sentence:
    #...and see if it matches the test word
    if word == 'text':
    wkar.append(word)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...