gpt4 book ai didi

Python 正则表达式匹配带转义单引号的引号字符串

转载 作者:行者123 更新时间:2023-11-28 20:40:30 28 4
gpt4 key购买 nike

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

"'.+?'"

但我需要正则表达式,它可以使用 postgres 找到单引号字符串,例如单个 qoutes 的转义(加倍单个 qoutes)。需要匹配这样的东西:

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

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

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

最佳答案

当然,'(?:[^']|'')*'是为此工作的正则表达式:它匹配 ' 后跟除 ' 以外的零个或多个字符或双 ' 后跟尾随 '.

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

'[^']*(?:''[^']*)*'

参见 the regex demo并注意正则表达式找到所有匹配项需要多少步。

正则表达式可以理解为

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

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

请注意:如果您添加前瞻性检查是否有 或尾随 ':

'.+?'(?=,|$)
^^^^^^^

参见 regex demo .但是,它依赖于上下文并且效率低于展开的正则表达式。

关于Python 正则表达式匹配带转义单引号的引号字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35722712/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com