Регулярное выражение для поиска совпадений в списке Python - PullRequest
0 голосов
/ 20 мая 2019

В настоящее время я перебираю некоторые файлы (работает отлично) и пытаюсь выяснить, как получить индексы чего-либо и посмотреть, можно ли найти слово, которое ему соответствует, в предоставленном списке.

Например,:

У меня есть следующее в одном из файлов:

MYLIST['APPLE'] = 'Granny-Smith'
SOMETHINGELSE['BUILDING'] = 'Tall'
ANOTHERTHING['SPELLING'] = 'bad'
ADDITIONALLY['BERRY'] = 'Rasp'

У меня есть список вещей, по которым я пытаюсь найти соответствие:

keywords = ['apple', 'berry', 'grape']

Если яиспользуйте это регулярное выражение, оно найдет индексы в порядке (но находит их все):

\[(.*?)\]

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

Что еще мне нужно добавить в регулярное выражение, чтобы выполнить это?

Ответы [ 2 ]

1 голос
/ 20 мая 2019

Если вы хотите использовать только регулярные выражения, хорошо, вы можете использовать:

keywords = ['apple', 'berry', 'grape']
regex = "\[({})\]".format("|".join(keywords))

Я оставлю вам верхний / нижний регистры.

Понял идею отсюда Как сделать re.compile () со списком в Python , так что upvote для этого.

1 голос
/ 20 мая 2019

Если у вас есть несколько слов, вы можете использовать только регулярные выражения, но если у вас большое количество слов, более разумно объединить регулярные выражения и обычный поиск:

import re

data = [
    "MYLIST['APPLE'] = 'Granny-Smith'",
    "SOMETHINGELSE['BUILDING'] = 'Tall'",
    "ANOTHERTHING['SPELLING'] = 'bad'",
    "ADDITIONALLY['BERRY'] = 'Rasp'"
]

REGEX = re.compile(r"\['(?P<word>.*?)'\]")
words = ['apple', 'berry', 'grape']

for line in data:
    found = REGEX.search(line)
    if found:
        word = found.group('word').lower()
        if word in words:
            print('FOUND: ', word)

напечатает:

FOUND:  apple
FOUND:  berry

Этот метод также лучше, потому что регулярное выражение намного проще и более читабельно, поэтому его легче отлаживать и модифицировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...