Python,加快用于提取子字符串的正则表达式



我有以下文字

text = "This is a string with C1234567 and CM123456, CM123, F1234567 and also M1234, M123456"

我想提取这个子字符串列表

['C1234567', 'CM123456', 'F1234567']

这就是我想出的

new_string = re.compile(r'b(C[M0-9]d{6}|[FM]d{7})b')
new_string.findall(text)

但是,我想知道是否有一种方法可以更快地执行此操作,因为我有兴趣执行此操作数万次。

我以为我可以使用^来匹配字符串的开头,但是我想出了正则表达式

new_string = re.compile(r'b(^C[M0-9]d{6}|^[FM]d{7})b')

不再返回任何东西。我知道这是一个非常基本的问题,但我不确定如何正确使用^

好消息和坏消息。 坏消息,正则表达式看起来不错,很难改进。 好消息,我有一些想法:) 我会尝试在盒子之外做一点思考,如果你正在寻找性能。 我做提取转换加载工作,并且使用Python做很多工作。

  • 你已经在做重新编译(大帮助(
  • 正则表达式引擎是从左到右的,因此可以短路。 似乎不适用于这里
  • 如果你有一大块数据要循环多次,那就提前清理一次你知道不匹配的东西。 想想一个HTML页面,你只希望HEAD中的东西得到HEAD,并且需要在该部分上运行许多正则表达式的循环。 提取该部分,仅执行该部分,而不是整个页面。 似乎很明显,并不总是:)
  • 使用一些指标,尝试一下cProfile。 也许有一些逻辑可以加快您的正则表达式。 至少你可以找到你的瓶颈,也许正则表达式根本不是问题。

最新更新