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

Posted

技术标签:

【中文标题】如何在python中过滤三重和双引号?【英文标题】:How to filter triple and double simple quotes in python? 【发布时间】:2016-10-21 16:04:45 【问题描述】:

我正在尝试清理文本以保留最多的字母、数字和最常用的标点符号。例如,我有时有 '''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. 中找不到正则表达式。

【问题讨论】:

你有没有像'' hello '' world '' foo ''这样的输入? 它没有捕捉到它,因为您只匹配引号内的非 ' 字符,但是 d'une 等中有一个。 也许我遗漏了一些东西,但是如果你用双引号括起来你的 RE 不是更简单吗?像这样:"'''[^']*'''"? @cdarke 是的,拜托! tqre = re.compile("'''[^']*'''") 【参考方案1】:

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

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

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

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

. = 除换行符以外的任何字符, * = 零个或多个, ? 后星 = 非贪婪匹配

【讨论】:

也称为最小匹配,可以应用于任何量词。 太好了,这完全解决了我的问题!有没有办法将问题标记为已解决?

以上是关于如何在python中过滤三重和双引号?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确转义 JSP 标记中的三重嵌套引号

python输出串多行数字空格

如何将包含单引号和双引号值的 Python 列表转换为所有双引号值

python单引号,双引号和三双引号的区别

python单引号和双引号的区别

python里的单引号和双引号有啥区别