Python ищет слово в списке, используя регулярное выражение

asma mostafa спросил: 28 марта 2018 в 01:39 в: regex

Мне нужна помощь для этого, как Im beginner, что я могу сделать, если я хочу искать на коте с регулярным выражением любое количество пробелов и проверять, есть ли он в списке или нет, как в совпадении точно ... любая помощь

import re
l = ["hello asma", "     cat", "welcome"]# iterates over three elements in the list
r = re.compile(r".*cat")
word_search="cat"
if r in l:
    print("yes in")
else:
print("not found")

3 ответа

Есть решение
ramana vv ответил: 28 марта 2018 в 01:54

Не нужно использовать re. Вы можете сделать это с помощью простого списка и объединений

l = ["hello asma", "     cat", "welcome"]# iterates over three elements in the list
word_search="cat"print "\n".join(s for s in l if word_search.lower() in s.lower())

Это очень просто и даст вам все значения, которые содержит cat

asma mostafa ответил: 29 марта 2018 в 10:57
спасибо, но мне нужно точно соответствовать любое предложение
ramana vv ответил: 29 марта 2018 в 01:17
Вы хотите знать, существует или нет, верно?
usr2564301 ответил: 29 марта 2018 в 02:48

Нет необходимости в регулярном выражении. Вы хотите список элементов, которые содержат ваше точное слово, за исключением того, что он может быть окружен любым количеством пробелов. Таким образом, вы можете сравнить word_search для каждого элемента i в l с i.strip(), который удаляет оставшиеся пробелы и правильно. То, что остается, должно соответствовать вашей поисковой фразе:

l = ['hello asma', '     cat', 'welcome']
word_search = 'cat'
print ([i for i in l if i.strip() == word_search])
>>> ['     cat']

Если вы настаиваете на использовании регулярного выражения в любом месте: то, что вы пробовали, не будет работать правильно, потому что .*cat будет совпадать с чем угодно, и только тогда с точной фразой cat. Чтобы игнорировать пробелы перед фразой, используйте *cat (перед * есть пробел, но вы можете использовать \s, "любой вид of space"):

r = re.compile(r'\s*cat')
print ([i for i in l if re.match(r, i)])
>>> ['     cat']

, но произойдет сбой (т. е. ложное возвращение совпадения), если ваш ввод содержит "cat dog". Более строгое соответствие r'^\s*cat\s*$' будет только соответствовать cat с любым количеством пробелов вокруг.

ramana vv ответил: 29 марта 2018 в 03:43

Если вы хотите печатать только существует / ("да в") или нет ("не найден"),

проверьте этот код:

l = ["hello asma", "     cat", "welcome"]# iterates over three elements in the listword_search="cat"
index=0
for text in l:
    if word_search in text:
        print("yes in")
        break;
    else:
        if(len(l)==index=1):
            print("not found")
    index += 1#the output is "yes in" //expected output

Другое и более разумное решение:

if word_search in '\n'.join(l):
    print "yes in"
else:
    print "not found"#the output is "yes in" //expected output
usr2564301 ответил: 29 марта 2018 в 02:32
Ваше "более разумное решение" не работает для l = ['a ca', 'test'] (возвращается True). Разумнее всего использовать '\n'.join(..) (если word_search также не может содержать \n). Кроме того, кажется, что OP хочет соответствовать только items , состоящим из поискового слова, окруженного любым количеством пробелов. (Вопрос по этому вопросу неясен.)
ramana vv ответил: 29 марта 2018 в 03:34
извините, умное решение идеально подходит для списка строк, но только решение1 я забыл сделать его index + 1
ramana vv ответил: 29 марта 2018 в 03:34
сделать его не найденным 1 или не найденным 2 для отладки обоих одновременно
ramana vv ответил: 29 марта 2018 в 03:36
пожалуйста, проверьте измененный ответ
ramana vv ответил: 29 марта 2018 в 03:40
проверьте здесь tpcg.io/GRZI8E, чтобы проверить это