[英]Java Regex Help: Splitting String on spaces, “=>”, and commas
我需要在以下任何序列上拆分字符串:
1個或多個空格
0個或更多空格,后跟逗號,后跟0或更多空格,
0個或多個空格,后跟“=>”,后跟0或更多空格
之前沒有使用Java正則表達式的經驗,所以我有點困惑。 謝謝!
例:
添加r10,r12 => r10
store r10 => r1
只需創建匹配任意三種情況的正則表達式並將其傳遞給split
方法:
string.split("\\s*(=>|,|\\s)\\s*");
正則表達式在字面上意味着
\\\\s*
) =>|,|\\\\s
) \\\\s*
) 您可以使用普通空格字符替換空格\\\\s
(檢測空格,制表符,換行符等) 如有必要。
為簡單起見,我將解釋你對“空間”的指示( )作為“任何空白”(
\\s
)。
翻譯您的規范或多或少“逐字逐句”是划分以下任何一個:
\\s+
\\s*
),后跟逗號( ,
),后跟0或更多空格( \\s*
)
\\s*,\\s*
\\s*
),后跟“=>”( =>
),后跟0個或更多個空格( \\s*
)
\\s*=>\\s*
要匹配上述任何一項: (\\s+|\\s*,\\s*|\\s*=>\\s*)
但是,您的規范可以“減少”為:
\\s*
, (\\s|,|=>)
\\s*
把它們放在一起: \\s*(\\s|,|=>)\\s*
簡化形式繞過一些極端情況,嚴格翻譯形式,使一些意想不到的空“匹配”。
這是一些代碼:
import java.util.regex.Pattern;
public class Temp {
// Strictly translated form:
//private static final String REGEX = "(\\s+|\\s*,\\s*|\\s*=>\\s*)";
// "Reduced" form:
private static final String REGEX = "\\s*(\\s|=>|,)\\s*";
private static final String INPUT =
"one two,three=>four , five six => seven,=>";
public static void main(final String[] args) {
final Pattern p = Pattern.compile(REGEX);
final String[] items = p.split(INPUT);
// Shorthand for above:
// final String[] items = INPUT.split(REGEX);
for(final String s : items) {
System.out.println("Match: '"+s+"'");
}
}
}
輸出:
Match: 'one'
Match: 'two'
Match: 'three'
Match: 'four'
Match: 'five'
Match: 'six'
Match: 'seven'
String[] splitArray = subjectString.split(" *(,|=>| ) *");
應該這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.