每行最后两个引号的正则表达式

时间:2018-10-03 17:31:47

标签: regex

我将以下内容用作SQL查询的一部分,这让我着迷于尝试解决这一问题:

"ZENDCUST" as "End Customer ID",
"ZCENCSLS___T" as "End Customer Desc",
"ZCENCSLS__0CUST_GROUP" as "Cust Grp-EC-MD ID",
"ZCENCSLS__0CUST_GROUP___T" as "Cust Grp-EC-MD Desc",
"ZENDCUST__0CITY" as "End Customer City",

是否存在可以获取第三和第四双引号的RegEx? 即第1行变成 "ZENDCUST" as 'End Customer ID',

这将在5个以上示例行中重复进行。

我可以使用\"(?!\sas),但这不能省略第一个引号。

https://regexr.com/40jhr

2 个答案:

答案 0 :(得分:2)

也许您的解决方案与第三和第四双引号不匹配, 但最后一对是双引号(以及它们之间的双引号)。

找到它们的正则表达式为:

"([^"]+)"(?!.*")

详细信息:

  • "-双引号。
  • ([^"]+)-除双引号以外的一系列字符,作为捕获组。
  • "-第二个双引号。
  • (?!.*")-双引号的负向超前查找,进一步 在当前行中。这保证了以前捕获的内容 是最后一对双引号。

例如用'\1'代替每个匹配项,您可以更改双引号 问题成一个。

有关工作示例,请参见https://regex101.com/r/a7GyGS/1

答案 1 :(得分:1)

如果您使用的工具或语言在其正则表达式集中支持先行,那么您将可以使用正先行。您还应该启用m标志:

"(?=[^"]*(?:"[^"]*)?$)

请参见live demo here

故障:

" # Match a double quotation mark
(?= # Start of a positive lookahead
    [^"]* # Match anything but a "
    (?: # Start of a non-capturing group
        "[^"]* # Match one " and anything but a "
    )? # End of non-capturing group, optional
    $ End of line
) # End of positive lookahead