Регулярное выражение Python удалить все, кроме строк из списка - PullRequest
0 голосов
/ 10 ноября 2018

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

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], но мне нужна хорошая производительность, так как она будет использоваться с миллионами строк информационного кадра панд с str.replace

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Возможно разделить строку

    bdv. mot. g. vns. kilm.

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

0 голосов
/ 10 ноября 2018

Символ . имеет особое значение в регулярных выражениях. Вы можете использовать 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

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