在 Python 3 中,对大量字符串执行基于正则表达式的替换可能是一个耗时的过程。本文探讨了两种潜在的方法,可以在仅需要在单词边界进行替换的情况下提高此类操作的效率。
使用 str.替换方法可能会比 re.sub 提供更高的性能。为了确保替换仅限于字边界,请在替换方法中使用 b 元字符。例如:
import string # Create a list of common English stop words stop_words = set(line.strip() for line in open('stop_words.txt')) # Define a function for replacing stop words def replace_stop_words(text): # Generate pattern by escaping each stop word with \b metacharacter pattern = r'\b' + string.join(['\b%s\b' % word for word in stop_words]) + r'\b' # Perform the replacement using str.replace return text.replace(pattern, '')
加速替换过程的另一种方法涉及利用 trie,它是从禁用词列表。 trie 的结构可实现高效匹配,并可带来显着的性能提升。
import trie # Initialize the trie trie = trie.Trie() # Add banned words to the trie for word in banned_words: trie.add(word)
# Obtain the regular expression banned_words_pattern = r"\b" + trie.pattern() + r"\b"
# Perform the replacement using re.sub for sentence in sentences: sentence = sentence.replace(banned_words_pattern, '')
两者方法提供了潜在的性能优势。选择取决于具体要求和禁用词列表的大小。对于相对较小的列表,使用 str.replace 的单词边界替换方法可能就足够了。然而,对于较大的禁用单词列表,基于 trie 的方法可以显着加快执行时间。
以上是如何优化 Python 中的正则表达式替换以提高速度,尤其是在单词边界处?的详细内容。更多信息请关注PHP中文网其他相关文章!