如何在python中过滤三重和双重简单引号?

时间:2016-10-21 16:04:46

标签: python regex string-matching single-quotes

我试图清理文字以保留最多的字母,数字和大多数通常的标点符号。例如,我有时会''''''''''或者'''''所以我想删除那些多个简单的引号。 到目前为止,我已选择使用两个正则表达式:

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.中找不到正则表达式。

1 个答案:

答案 0 :(得分:3)

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

这种正则表达式最好使用lazy quantifier

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

此处.*?表示匹配任何字符串,当有多个匹配时,请选择最短的匹配。

  • . =除了换行符之外的任何字符
  • * =零或更多,
  • 在明星=非贪婪的比赛之后
  • ?