Java Regex Help:在空格上分割字符串,“=>”和逗号
我需要在以下任何序列上拆分字符串:
1个或多个空格
0个或更多空格,后跟逗号,后跟0或更多空格,
0个或更多空格,后跟“=>”,后跟0或更多空格
之前没有使用Java正则表达式的经验,所以我有点困惑。 谢谢!
例:
添加r10,r12 => r10
store r10 => r1
只需创建匹配任何三种情况的正则表达式并将其传递给split
方法:
string.split("\\s*(=>|,|\\s)\\s*");
正则表达式在字面上意味着
- 零个或多个空格(
\\s*
) - 箭头,逗号或空格(
=>|,|\\s
) - 零个或多个空格(
\\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(" *(,|=>| ) *");
应该这样做。