正则表达式从Groovy GString删除\“?

时间:2010-10-15 16:41:07

标签: regex json grails groovy

我正在尝试使用Grails解析JSON,测试解析器我写了一个单元测试并将我的输入JSON放在一个看起来像这样的GString中:

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

\“stuff \”导致解析器中断。

我尝试使用String.replace(/\\"/, "")和其他一些组合删除\“但是它不执行任何操作或删除字符串中的所有引号。 This post告诉我,我需要使用5个斜杠:\\\\\"使其在Java中工作,但它在Groovy中不起作用。

编辑:此测试应该通过它来运行:

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

使用上述正则表达式失败。

任何提示?

1 个答案:

答案 0 :(得分:1)

据我所知,用/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")