我应该使用什么样的正则表达式?

时间:2014-10-15 14:13:02

标签: java regex string string-matching string-split

我试图分割一个句子,但当我放置一些左右空间正则表达式无法拆分时,这是我的正则表达式:\\s*(<>@<>)+\\s*

我的字符串:

hello<>@<>i try!!<>@<>every thing<>@<><>@<>man<>@<>1234567

我的预期输出:

hello
i try!!
every thing
man
123456

Pattern pt = Pattern.compile("\\s*(<>@<>)+\\s*");
pm = pt.split(m);

当我尝试时,这不能分句。

hello   <>@<>i try!!  <>@<>   every thing  <>@<><>@<>man <>@<>1234567

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,你想分开一个空格,或<>@<>,可以在空格之前和/或后面。

这应该执行你的分割:

String[] input = { 
    "hello<>@<>i try!!<>@<>every thing<>@<><>@<>man<>@<>1234567",
    "hello <>@<>i try!! <>@<> every thing <>@<><>@<>man <>@<>1234567" 
};
for (String s: input) {
    System.out.println(Arrays.toString(s.split("(\\s?<>@<>\\s?)|\\s")));
}

<强>输出

[hello, i, try!!, every, thing, , man, 1234567]
[hello, i, try!!, every, thing, , man, 1234567]

注意

请注意String"thing"之间的空"man",因为您有两个连续的分隔符。

您可以迭代并打印每一行,而不是打印数组。

for (String s: input) {
    String [] split = s.split("(\\s?<>@<>\\s?)|\\s");
    for (String item: split) {
        System.out.println(item);
    }
}

...每行会打印一个项目。

答案 1 :(得分:1)

这个正则表达式适合你:

(\\s*<>@<>\\s*)+

<强>代码:

String str = "hello   <>@<>i try!!  <>@<>   every thing  <>@<><>@<>man <>@<>1234567";
String[] toks = str.split( "(\\s*<>@<>\\s*)+" );
for (String tok: toks)
    System.out.printf(">>> [%s]%n", tok);

str = "hello<>@<>i try!!<>@<>every thing<>@<><>@<>man<>@<>1234567";
toks = str.split( "(\\s*<>@<>\\s*)+" );
for (String tok: toks)
    System.out.printf(">>> [%s]%n", tok);

输出(两次) ::

>>> [hello]
>>> [i try!!]
>>> [every thing]
>>> [man]
>>> [1234567]