Regex, чтобы удалить \ "из Groovy GString? - PullRequest
1 голос
/ 15 октября 2010

Я пытаюсь проанализировать JSON с помощью Grails, протестировать синтаксический анализатор. Я написал модульный тест и поместил свой входной JSON в строку GString, которая выглядит примерно так:

"""{"Information":"Some data here \"stuff\" some more.","AnswerToEverything":42,"Other":71,"Name":"Joe Doe"}"""

\ "вещи \" вызывают сбой синтаксического анализатора.

Я пытался использовать String.replace(/\\"/, "") и несколько других комбинаций, чтобы удалить \ ", но он либо ничего не делает, либо удаляет все кавычки из строки. Этот пост говорит мне, что мне нужно использовать 5 слешей: \\\\\", чтобы заставить его работать в Java, но он не работает в Groovy.

Редактировать: Этот тест должен пройти, чтобы он заработал:

str = """foo \"foobar\" bar"""
assert  str.replace("""\\\"""", "")  == "foo foobar bar"

С помощью приведенного выше регулярного выражения оно не работает.

Какие-нибудь советы?

1 Ответ

1 голос
/ 15 октября 2010

Из того, что я могу сказать, регулярные выражения, написанные как /regexp/, похоже, имеют проблемы с экранированными обратными слешами.Вы можете написать регулярное выражение с помощью конструкции """ следующим образом:

str = "\\\""
assert str[0] == "\\"
assert str[1] == "\""

assert str =~ """\\\""""
assert str.replace("""\\\"""", "") == ""

РЕДАКТИРОВАТЬ: JSON в исходном посте не содержит буквальных обратных косых черт.Вам по-прежнему нужно избегать буквального обратного слеша даже в """strings""".Я предполагаю, что вы хотите избежать тех, как в json2 ниже:

json1 = """{"Information":"Some data here \"stuff\" some more.","AnswerToEverything":42,"Other":71,"Name":"Joe Doe"}"""
json2 = """{"Information":"Some data here \\"stuff\\" some more.","AnswerToEverything":42,"Other":71,"Name":"Joe Doe"}"""
assert !json1.contains("\\")
assert json2.contains("\\")
assert json2.replace("""\\\"""", "replacement").contains("replacement")
...