Найти последний "в строках, где" записаны как ""

Я пытаюсь написать (Ruby) регулярное выражение для захвата двойной кавычки, которая закрывает строку EViews. В EViews строки заключаются в двойные кавычки, и чтобы включить в строку действительные двойные кавычки, мы пишем двойные двойные кавычки:

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

Строки могут появляться в любом месте строки, поэтому мне не помогают использование начала и конца строки.

То, что я до сих пор это:

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

То есть найдите двойную кавычку, которой предшествуют либо две двойные кавычки, либо двойная кавычка или двойная кавычка. Это захватывает заключительную двойную кавычку, но, к сожалению, также и открывающую.

Кстати, причина, по которой мне это нужно, заключается в том, что я работаю с файлом YAML, описывающим синтаксис EViews для Sublime Text 3. Что касается захвата строк, это то, что я до сих пор имел:

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

1 ответ

Решение

Этот вопрос, возможно, был сформулирован не лучшим образом. Я закончил с решением, которое, возможно, немного неуклюже, но работает:

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
Другие вопросы по тегам