Java Regex,Split括号中的标点符号除外

时间:2014-08-28 20:03:17

标签: java regex string

我有这个字符串:"您好,我的名字是[[Peter.java]]。"

期望的分裂是:[你好,我的名字,是,[[Peter.java]]]

我在punktuation标记处分开,但完全忽略了这些括号中的内容。

我试过了:

string.split("(?!\\[\\[.*\\]\\])\\s*(\\,|\\.|\\s)\\s*")

但这不起作用,因为输出是[Hello,my,Name,is,[[Peter,java]]]。你能救我吗?

其他例子:

"Hello. My name is [[Peter.java]]" --> [Hello, My, name, is, [[Peter.java]]]

"Hi. How, [[are,you]]" --> [Hi, How, [[are,you]]]

2 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式进行拆分:

[.,\s]+(?!\w+])

<强> Working demo

enter image description here

代码

public void testRegex() {
    String str = "Hello. my Name is [[Peter.java]].";

    String[] arr = str.split("[.,\\s]+(?!\\w+])");

    System.out.println(Arrays.toString(arr));
}
// Output: [Hello, my, Name, is, [[Peter.java]]]

修改:在评论中指出 HamZa ,上面的正则表达式失败的是字符串something, like this]。因此,要利用 SKIP&amp;失败 pcre功能,可以使用以下方法改进此正则表达式:

\[\[.*?\]\]     # Match our brackets
(*SKIP)(*FAIL)  # Skip that match and proceed further
|               # or
[\s.,]+         # any character of: whitespace (\n, \r, \t,
                         \f, and " "), '.', ',' (1 or more times)

<强> Working demo

答案 1 :(得分:1)

您可能希望使用不同类型的正则表达式,而不是使用String.split。

/\[\[(.*?)\]\]|(\w+)\W/g

Online demo

然后使用匹配器迭代匹配。