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

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

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

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

例:
添加r10,r12 => r10
store r10 => r1

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

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

正则表达式在字面上意味着

  1. 零个或多个空格( \\s*
  2. 箭头,逗号或空格( =>|,|\\s
  3. 零个或多个空格( \\s*

您可以使用普通空格字符替换空格\\s (检测空格,制表符,换行符等) 如有必要。

严格翻译

为简单起见,我将解释你对“空间”的指示( )作为“任何空白”( \s )。

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

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

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

缩小forms

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

  • 0个或更多空格
    • \s*
  • 后跟空格,逗号或“=>”
    • (\s|,|=>)
  • 然后是0或更多的空格
    • \s*

把它们放在一起: \s*(\s|,|=>)\s*

简化forms绕过一些极端情况,严格翻译forms,使一些意想不到的空“匹配”。

这是一些代码:

 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(" *(,|=>| ) *"); 

应该这样做。