re.compile中的Python正则表达式模式最大长度?

mqu*_*tin 6 python regex maxlength

我尝试用re.compilePython 3 编译一个大模式.

我尝试编译的模式由500个小单词组成(我想从文本中删除它们).问题是它在大约18个单词后停止了模式

Python不会引发任何错误.

我所做的是:

stoplist = map(lambda s: "\\b" + s + "\\b", stoplist)
stopstring = '|'.join(stoplist)
stopword_pattern = re.compile(stopstring)
Run Code Online (Sandbox Code Playgroud)

stoptring是好的(所有单词都在),但模式要短得多.它甚至停在一个字的中间!

正则表达式是否有最大长度?

che*_*ner 6

考虑这个例子:

import re
stop_list = map(lambda s: "\\b" + str(s) + "\\b", range(1000, 2000))
stopstring = "|".join(stop_list)
stopword_pattern = re.compile(stopstring)
Run Code Online (Sandbox Code Playgroud)

如果您尝试打印图案,您会看到类似

>>> 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|\)
Run Code Online (Sandbox Code Playgroud)

这似乎表明该模式不完整。但是,这似乎只是对象__repr__和/或__str__方法的限制re.compile。如果您尝试对模式的“缺失”部分执行匹配,您会看到它仍然成功:

>>> stopword_pattern.match("1999")
<_sre.SRE_Match object; span=(0,4), match='1999')
Run Code Online (Sandbox Code Playgroud)

  • `stopword_pattern.pattern` 应该包含他正在寻找的完整字符串。(这是在 Python 2.6 和 3.1 中,编译的正则表达式似乎没有自定义的 `__str__` 或 `__repr__` 方法。从那时起它可能已经改变了。) (4认同)