我正在使用Python 3.5.2
我有两个清单
所以,我必须循环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如果我的单词的长度大于句子的长度,我已经通过跳过来略微提高了速度,但这并没有太大的改进.
谢谢你的任何建议.
如何将所有大于36的数字与任何更大的数字匹配?
我试过这个表达式:
[4-9]\d+|\d{3,}
Run Code Online (Sandbox Code Playgroud)
问题是这将选择所有大于40的数字但我需要37,38和39,我怎样才能实现这一目标?
注意:我的查询不同:我无法理解,所以我问自己的问题,我的查询是100%不同.在某些方面相似是另一回事,而不是重复.和平了.
在以下字符串的情况下,我的正则表达式很弱
"OtherId":47
"OtherId":7
"MyId":47 (Match this one)
"MyId":7
Run Code Online (Sandbox Code Playgroud)
我想拿起有"MyId"的字符串和一个不是1 - 9的数字
我以为我可以使用:
结合使用: 正则表达式:是否有AND运算符?
但它没有发生......你可以在这里看到我失败的尝试:
https://www.regextester.com/index.php?fam=99753
这是
\b"MyId":\b(?=.*^[0-10]\d)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?