Java Regex Help:在空格上拆分字符串,“=>”和逗号

时间:2010-09-06 21:43:13

标签: java regex

我需要在以下任何一个序列上拆分字符串:

1个或更多个空格
0个或更多空格,后跟逗号,后跟0或更多空格,
0个或更多空格,后跟“=>”,后跟0或更多空格

之前没有使用Java正则表达式的经验,所以我有点困惑。谢谢!

例:
添加r10,r12 => R10
store r10 => R1

3 个答案:

答案 0 :(得分:32)

只需创建匹配任意三种情况的正则表达式,并将其传递给split方法:

string.split("\\s*(=>|,|\\s)\\s*");

这里的正则表达式意味着

  1. 零个或多个空格(\\s*
  2. 箭头,逗号或空格(=>|,|\\s
  3. 零个或多个空格(\\s*
  4. 如果需要,您可以用空格字符\\s替换空格(检测空格,制表符,换行符等)。

答案 1 :(得分:16)

严格翻译

为简单起见,我将把“space”()的指示解释为“任何空格”(\s)。

或多或少地“逐字逐句”翻译您的规范是为了划分以下任何一个:

  • 1个或更多空格
    • \s+
  • 0个或更多空格(\s*),后跟逗号(,),后跟0个或更多个空格(\s*
    • \s*,\s*
  • 0个或更多空格(\s*),后跟“=>” (=>),后跟0或更多空格(\s*
    • \s*=>\s*

要匹配上述任何内容:(\s+|\s*,\s*|\s*=>\s*)

缩小形式

但是,您的规范可以“缩减”为:

  • 0或更多空格
    • \s*
  • 后跟空格,逗号或“=>”
    • (\s|,|=>)
  • 后跟0或更多空格
    • \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(" *(,|=>| ) *");

应该这样做。