如何在同一個正則運算式陳述句中同時實作前瞻(無需替換)和非前瞻?
我想拆分一個句子,例如:
"ad1 cow run sick ag2 4 8 6 9 crap2 ag lag pag arg2 8 6 5"
進入
ad1 cow run sick
ag2 4 8 6 9
crap2 ag lag pag
arg2 8 6 5
這是幾乎讓我向前看的宣告:
"(?=\\s\\w\\w*\\d)"
也就是說,它會查找一個空格、字串中的一個字符、其后的任意數量的字符,然后是一個數字。這是我得到的:
ad1 cow run sick
ag2 4 8 6 9
crap2 ag lag pag
arg2 8 6 5
請注意那里的空間,因為我有一個前瞻。如何在同一個正則運算式陳述句中洗掉這些空格?
uj5u.com熱心網友回復:
你也可以使用你的模式作為匹配(注意\\w\\w*可以寫成\\w
\\w \\d.*?(?=\\s\\w \\d|$)
解釋
\\w \\d匹配 1 個單詞字符和一個數字.*?匹配盡可能少的字符(?=積極的前瞻\\s\\w \\d匹配一個空白字符、1 個以上的單詞字符和一個數字|或者$斷言字串的結尾
)關閉前瞻
正則運算式演示| Java 演示
Java 示例
String regex = "\\w \\d.*?(?=\\s\\w \\d|$)";
String string = "ad1 cow run sick ag2 4 8 6 9 crap2 ag lag pag arg2 8 6 5\n";
Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println(matcher.group(0));
}
輸出
ad1 cow run sick
ag2 4 8 6 9
crap2 ag lag pag
arg2 8 6 5
uj5u.com熱心網友回復:
您可以將空白匹配模式移出前瞻:
"\\s (?=\\w \\d)"
這樣,空格將在拆分程序中被消耗并因此被洗掉。
細節
\s- 一個或多個空格(?=\w \d)- 與緊隨其后的一個或多個單詞字符和一個數字的位置匹配的正向前瞻。
請參閱正則運算式演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/491865.html
上一篇:無法從物件值反序列化型別為“[Ljava.lang.String;”的值(令牌“JsonToken.START_OBJECT”)
