我需要在以下任何一个序列上拆分字符串:
1个或更多个空格
0个或更多空格,后跟逗号,后跟0或更多空格,
0个或更多空格,后跟“=>”,后跟0或更多空格
之前没有使用Java正则表达式的经验,所以我有点困惑。谢谢!
例:
添加r10,r12 => R10
store r10 => R1
答案 0 :(得分:32)
只需创建匹配任意三种情况的正则表达式,并将其传递给split
方法:
string.split("\\s*(=>|,|\\s)\\s*");
这里的正则表达式意味着
\\s*
)=>|,|\\s
)\\s*
)如果需要,您可以用空格字符\\s
替换空格(检测空格,制表符,换行符等)。
答案 1 :(得分:16)
为简单起见,我将把“space”()的指示解释为“任何空格”(
\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'
答案 2 :(得分:3)
String[] splitArray = subjectString.split(" *(,|=>| ) *");
应该这样做。