通过正则表达式解析字符串

时间:2011-07-13 03:26:42

标签: java regex

我有一串

"name"=>"3B Ae", "note"=>"Test fddd \"33 Ae\" FIXME", "is_on"=>"keke, baba"

我希望通过java程序将其解析为

的片段
name
3B Ae
note
Test fddd \"33 Ae\" FIXME
is_on
keke, baba

注意,字符串的内容,即name3B Ae,不是固定的。 有什么建议吗?

3 个答案:

答案 0 :(得分:4)

如果你:

  • replace =>用:
  • 用{}
  • 包裹完整的字符串

结果将如下所示,这是有效的JSON。然后,您可以使用JSON解析器(例如,GSON或Jackson)将这些值解析为java对象。

{
    "name": "3B Ae",
    "note": "Test fddd \"33 Ae\" FIXME",
    "is_on": "keke, baba"
}

如果您可以控制产生此字符串的进程,我强烈建议您使用JSON或XML等标准格式,以便在另一端更容易解析。

答案 1 :(得分:1)

由于引用规则,我不确定正则表达式(即使是具有负外观背景的PCRE)也可以一致地解析它。您可能想要的是使用pushdown automaton或其他能够处理无上下文语言的解析器。

答案 2 :(得分:-1)

如果您可以确保您的数据(密钥或值)没有=>,(或找到一些不会发生的其他分隔符),那么解决方案非常简单:< / p>

  • ,分割字符串,即可获得key => value
  • value => pairs键分开=>即可得到您想要的内容

如果inputString持有 "name"=>"3B Ae", "note"=>"Test fddd \"33 Ae\" FIXME", "is_on"=>"keke baba"
(例如从文件中)
(我已在,;之间将keke更改为baba

    String[] keyValuePairs = inputString.split(",");
    for(String oneKeyValue : keyValuePairs)
    {
       String[] keyAndValue = oneKeyValue.split("=>");
    }