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

У меня есть строка:

bdv. mot. g. vns. kilm.

И зная список строк вроде

important_strings_lst=['bdv.', 'dktv.', 'mot. g.', 'vyr. g.']

Я хочу получить выбор regex, например:

bdv. mot. g.

Я присоединился к списку и попробовал: идея отсюда

regex = re.compile(r'\b(?!bdv.|dktv.|mot. g.|vyr. g.)\w+', re.UNICODE)
regex.sub("", 'bdv. mot. g. vns. kilm.')

Есть

'bdv. mot. . . .'

Поменять местами в регулярном выражении с \s тоже не получилось. Как это сделать?

Я мог бы использовать что-то вроде [x for x in important_strings_lst if x in my_string], но мне нужна хорошая производительность, так как это будет использоваться с миллионами строк фрейма данных pandas с ул. заменить

🤔 А знаете ли вы, что...
В Python есть инструменты для создания графиков и визуализации данных, такие как библиотеки Matplotlib и Seaborn.


347
2

Ответы:

Решено

Символ . имеет особое значение в регулярных выражениях. Вы можете использовать re.escape, чтобы сделать строку «безопасной» для использования в регулярном выражении.

>>> import re
... important_strings=['bdv.', 'dktv.', 'mot. g.', 'vyr. g.']
... regex = re.compile('|'.join(re.escape(s) for s in important_strings))
... regex.findall('bdv. mot. g. vns. kilm.')
['bdv.', 'mot. g.']

У Pandas есть собственный findall, который должен работать как re.findall


Может быть, разделить строку

    bdv. mot. g. vns. kilm.

используя свой список, и удалите из исходной строки то, что осталось после разделения.