相关疑难解决方法(0)

在Python 3中加速数百万的正则表达式替换

我正在使用Python 3.5.2

我有两个清单

  • 大约750,000个"句子"的列表(长串)
  • 我希望从我的750,000个句子中删除大约20,000个"单词"的列表

所以,我必须循环750,000个句子并执行大约20,000次替换,但是只有我的话实际上是"单词"并且不是更大字符串的一部分.

我是通过预先编译我的文字来做到这一点的,这样它们就被\b元字符所包围

compiled_words = [re.compile(r'\b' + word + r'\b') for word in my20000words]
Run Code Online (Sandbox Code Playgroud)

然后我循环我的"句子"

import re

for sentence in sentences:
  for word in compiled_words:
    sentence = re.sub(word, "", sentence)
  # put sentence into a growing list
Run Code Online (Sandbox Code Playgroud)

这个嵌套循环每秒处理大约50个句子,这很好,但是处理我的所有句子仍需要几个小时.

  • 有没有办法使用该str.replace方法(我认为更快),但仍然要求替换只发生在字边界

  • 或者,有没有办法加快re.sub方法?re.sub如果我的单词的长度大于句子的长度,我已经通过跳过来略微提高了速度,但这并没有太大的改进.

谢谢你的任何建议.

python regex string performance replace

117
推荐指数
7
解决办法
2万
查看次数

使用正则表达式匹配所有大于36的数字?

如何将所有大于36的数字与任何更大的数字匹配?

我试过这个表达式:

[4-9]\d+|\d{3,}
Run Code Online (Sandbox Code Playgroud)

问题是这将选择所有大于40的数字但我需要37,38和39,我怎样才能实现这一目标?

注意:我的查询不同:我无法理解,所以我问自己的问题,我的查询是100%不同.在某些方面相似是另一回事,而不是重复.和平了.

regex

5
推荐指数
1
解决办法
1164
查看次数

将字符串与单词和数字1-9匹配

在以下字符串的情况下,我的正则表达式很弱

"OtherId":47
"OtherId":7
"MyId":47     (Match this one)
"MyId":7
Run Code Online (Sandbox Code Playgroud)

我想拿起有"MyId"的字符串和一个不是1 - 9的数字

我以为我可以使用:

RegEx:如何匹配所有大于49的数字?

结合使用: 正则表达式:是否有AND运算符?

但它没有发生......你可以在这里看到我失败的尝试:

https://www.regextester.com/index.php?fam=99753

这是

\b"MyId":\b(?=.*^[0-10]\d)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

regex

0
推荐指数
1
解决办法
147
查看次数

标签 统计

regex ×3

performance ×1

python ×1

replace ×1

string ×1