0

我有字符串:

bdv. mot. g. vns. kilm.

并且知道字符串列表,例如

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

我想得到这样的regex选择:

bdv. mot. g.

我加入了列表并尝试过:idea from here

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的数百万行熊猫数据框一起使用

4

2 回答 2

1

.字符在正则表达式中具有特殊含义。您可以使用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.']

熊猫有自己的findall应该像re.findall

于 2018-11-10T17:51:10.143 回答
0

也许拆分字符串

    bdv. mot. g. vns. kilm.

使用您的列表并从原始字符串中删除拆分后剩下的内容。

于 2018-11-10T18:08:25.723 回答