Python,加速正则表达式提取子字符串

标签 python regex

我有以下文字

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。也许您正在调整的地方有一些逻辑可以加快速度。至少你可以找到你的瓶颈,也许正则表达式根本不是问题。

关于Python,加速正则表达式提取子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45611926/

相关文章:

python - 没有名为 Selenium 的模块

python - 如何准确测量 python 进程的 CPU 时间?

python - Matplotlib 动画多个大圆圈并从 pandas df 更新

javascript - 如何知道目标字符串前是否有非空白字符?

regex - htaccess 不存在的子域到主域重定向

python - 磁力计的校准没有给出预期的结果

python - 将数字范围生成为字符串Python

java - 在具有 Java 正则表达式问题的组之间插入连字符

r - 转换为正确的大小写,除非它是 R 中的 TLA

r - 仅保留字符串中的值