代码之家  ›  专栏  ›  技术社区  ›  Elijah

如何使用排除转义版本令牌的正则表达式拆分字符串?

  •  2
  • Elijah  · 技术社区  · 17 年前

    在Java中,我使用stringsplit方法来拆分包含分号分隔的值的字符串。

    目前,我有以下行,在99%的情况下都有效。

    String[] fields = optionsTxt.split(";");
    

    但是,该要求已添加为将转义分号作为字符串的一部分。因此,以下字符串应解析为以下值:

    "Foo foo;Bar bar" => [Foo foo] [Bar bar]
    "Foo foo\; foo foo;Bar bar bar" => [Foo foo\; foo foo] [Bar bar bar]
    

    这应该很简单,但我完全不确定该怎么做。我只是不想在有一个\;并且仅当存在时才标记化;。

    有人知道这个神奇的公式吗?

    4 回复  |  直到 17 年前
        1
  •  2
  •   objects    17 年前

    试试这个:

    String[] fields = optionsTxt.split("(?<!\\\\);");
    
        2
  •  1
  •   bdk    17 年前

    也许有更好的方法,但快速而肮脏的方法是首先替换\;使用一些不会出现在输入缓冲区中的字符串,如{{转义分号}},然后在上执行标记化;,然后,当你取出每个标记时,按相反的顺序进行原始替换以放回\;

        3
  •  1
  •   jasonmw    17 年前

    使用正则表达式(java.util.regex)

    [^\\];
    

    try it out using a tool like this

        4
  •  0
  •   lins314159    17 年前

    仅使用提供的示例,就可以使用上面的对象代码。如果希望仅当分号前有偶数个反斜杠时才进行拆分,请尝试以下操作:

    String[] fields = optionsTxt.split("((?<!\\\\)|(?<=[^\\\\](\\\\\\\\){0,15}));");