簡體   English   中英

我應該使用哪種正則表達式?

[英]What kind of regex should i use?

我正在嘗試拆分一個句子,但是當我在左右兩側放置一些正則表達式無法拆分時,這是我的正則表達式: \\\\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

任何想法?

如果我對您的理解正確,那么您想在一個空格或<>@<>上分割,可以在空格之前和/或之后。

這應該執行您的拆分:

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]

注意

注意"thing""man"之間的空String ,因為您有兩個連續的定界符。

您可以迭代並打印每一行,而不必打印陣列。

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

...將每行打印一項。

此正則表達式應為您工作:

(\\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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM