0

我正在尝试编写一个(Ruby)正则表达式来捕获关闭 EViews 字符串的双引号。在 EViews 中,字符串用双引号括起来,为了在字符串中包含实际的双引号,我们编写双双引号:

myStr = "item1 item2 item3"
myStr2 = """item1"" ""item2"" ""item3"""

字符串可以出现在一行的任何位置,因此使用行的开头和结尾对我没有帮助。

到目前为止,我所拥有的是:

((?<="")|(?<!"))(")(?!")

也就是说,查找前面有两个双引号或没有双引号且后面没有双引号的双引号。这捕获了结束双引号,但遗憾的是也捕获了开头双引号。

附带说明一下,我需要这个的原因是我正在使用描述 Sublime Text 3 的 EViews 语法的 YAML 文件。至于捕获字符串,这是我迄今为止所拥有的:

strings:
  - match: '"'
    scope: punctuation.definition.string.begin.eviews
    push: string

string:
  - meta_scope: string.quoted.double.eviews
  - match: '"' #((?<="")|(?<!"))(")(?!")
    scope: punctuation.definition.string.end.eviews
    pop: true
4

1 回答 1

0

这个问题也许没有用最好的方式表达。我最终得到了一个可能有点笨拙但有效的解决方案:

strings:
  - match: '"'
    scope: punctuation.definition.string.begin.eviews
    push: string

string:
  - meta_scope: string.quoted.double.eviews
  - match: '""'
  - match: '"'
    scope: punctuation.definition.string.end.eviews
    pop: true
于 2016-11-17T16:40:46.337 回答