0

我正在尝试清理文本以保留最多的字母、数字和最常见的标点符号。例如,我有时有 '''words''' 或 ''words'' 所以我想去掉那些多个简单的引号。到目前为止,我选择使用两个正则表达式:

import re
tqre=re.compile('\'\'\'[^\']*\'\'\'') #for triple quotes
dqre=re.compile('\'\'[^\']*\'\'') #for "double" quotes

然后剥离每场比赛:

res1=tqre.sub(self.quoteExtract,text)
res2=dqre.sub(self.quoteExtract,res1)

在哪里:

def quoteExtract(self,match):
    return match.group().strip("'")

看起来它适用于三引号,但我有很多双引号通过,似乎它们没有被抓住。是不是因为它们不是真正简单的引号,而是另一个相似的标志?还有其他方法来处理它们吗?

例如:在* ''Esquisse d'une grammaire comparée de l'arménien classique'', 1903.正则表达式中找不到。

4

1 回答 1

3

它没有通过,因为'双引号之间有一个 (l'arménien),但您正在尝试匹配[^']*.

这种正则表达式最好使用惰性量词来表示:

tqre = re.compile("'''.*?'''")
dqre = re.compile("''.*?''")

这里.*?的意思是匹配任何字符串,当有多个匹配时,选择最短的一个。

  • .= 除换行符外的任何字符,
  • *= 零个或多个,
  • ?星号之后 = 非贪婪匹配
于 2016-10-21T16:12:11.457 回答