Python正则表达式将引用的字符串与转义的单引号相匹配

时间:2016-03-01 12:17:54

标签: python regex single-quotes

我使用此模式匹配解析器中的单引号字符串:

"'.+?'"

但我需要正则表达式,可以找到单引号字符串与postgres像单个qoutes逃逸(加倍单qoutes)。需要匹配这样的东西:

"'first', 'sec''ond', 't''hi''rd'"

我想找到以单引号开头和结尾的字符串的最短匹配,因此上面的字符串意味着3个子字符串:

'first'
'sec''ond'
't''hi''rd'

3 个答案:

答案 0 :(得分:4)

当然,'(?:[^']|'')*'是正确的工作正则表达式:它匹配ExpiresActive On ExpiresByType application/javascript "access plus 30 days" 后跟零个或多个字符而不是'或双' s后跟一个尾随'

但是,为了提高效率,您可以使用unroll-the-loop technique 展开

'

请参阅the regex demo并注意regexp查找所有匹配所需的步骤。

正则表达式可以读作

  • '[^']*(?:''[^']*)*' - 匹配'
  • ' - 然后是[^']*
  • 以外的零个或多个字符
  • ' - 然后是(?:''[^']*)*的零个或多个序列,后跟除''以外的零个或多个字符
  • ' - 然后匹配尾随'

这个正则表达式具有线性模式,尽可能少的回溯。

请注意:如果添加前瞻检查是否存在'或尾随后的字符串结尾,您仍然可以为当前方案执行您的正则表达式工作{{ 1}}:

,

请参阅regex demo。但是,它与依赖于上下文的正则表达式相关且效率较低。

答案 1 :(得分:2)

'(?:[^']|'{2})+'

单引号,然后贪婪地出现:

  • 不是单引号的字符
  • 或两个单引号

后跟单引号。

演示:https://regex101.com/r/zP2eK6/1

答案 2 :(得分:1)

对于您提供的模式,这应该有效:

'[\w']+'

匹配单引号后跟一个或多个非空格或单引号,后跟最后一个单引号。