首页 > 解决方案 > 带有破折号和空格的 Java 正则表达式拆分字符串

问题描述

我有一个像这样的字符串:

String t = "this is my--test string";

我需要按空间分割它 - 所以我尝试了:

String[] m = t.split("[\\s -]");

它返回

["this", "is", "my", "", "test", "string"]

但实际上我需要

["this", "is", "my", "--", "test", "string"]

我错过了什么?这可能吗?

标签: javaregex

解决方案


您可以使用

String[] result = t.split("\\s+|(?<=--)(?!-)|(?<!-)(?=--)")

请参阅正则表达式演示详情

  • \s+- 一个或多个空格
  • |- 或者
  • (?<=--)(?!-)- 紧跟在前面--和后面不紧跟的位置-
  • |- 或者
  • (?<-)(?=--)- 没有紧跟在前面-和紧跟在后面的位置--

请参阅Java 演示

String regex = "\\s+|(?<=--)(?!-)|(?<!-)(?=--)";
String string = "this is my--test string";
System.out.println(Arrays.toString(string.split(regex)));
// => [this, is, my, --, test, string]

推荐阅读