我尝试在Python 3中使用re.compile
编译一个大模式。
我尝试编译的模式由500个小单词组成(我想从文本中删除它们)。问题是它在大约18个单词之后停止了模式
Python不会引发任何错误。
我的工作是:
stoplist = map(lambda s: "\\b" + s + "\\b", stoplist)
stopstring = '|'.join(stoplist)
stopword_pattern = re.compile(stopstring)
stoptring是好的(所有单词都在),但模式要短得多。它甚至停在一个字的中间!
正则表达式是否有最大长度?
答案 0 :(得分:4)
考虑这个例子:
import re
stop_list = map(lambda s: "\\b" + str(s) + "\\b", range(1000, 2000))
stopstring = "|".join(stop_list)
stopword_pattern = re.compile(stopstring)
如果您尝试打印图案,则会看到类似
的内容>>> print(stopword_pattern)
re.compile('\\b1000\\b|\\b1001\\b|\\b1002\\b|\\b1003\\b|\\b1004\\b|\\b1005\\b|\\b1006\\b|\\b1007\\b|\\b1008\\b|\\b1009\\b|\\b1010\\b|\\b1011\\b|\\b1012\\b|\\b1013\\b|\\b1014\\b|\\b1015\\b|\\b1016\\b|\\b1017\\b|\)
似乎表明模式不完整。但是,这似乎只是对__repr__
个对象的__str__
和/或re.compile
方法的限制。如果您尝试执行匹配"缺少"模式的一部分,你会发现它仍然成功:
>>> stopword_pattern.match("1999")
<_sre.SRE_Match object; span=(0,4), match='1999')