java - 带有破折号和空格的 Java 正则表达式拆分字符串
问题描述
我有一个像这样的字符串:
String t = "this is my--test string";
我需要按空间分割它 - 所以我尝试了:
String[] m = t.split("[\\s -]");
它返回
["this", "is", "my", "", "test", "string"]
但实际上我需要
["this", "is", "my", "--", "test", "string"]
我错过了什么?这可能吗?
解决方案
您可以使用
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]
推荐阅读
- sql - CTE SQL Server:语句完成前最大递归100已用完
- amcharts4 - amcharts - 在类别之间添加刻度
- ecmascript-6 - Es6 程序中的类和构造函数
- tensorflow - 如何解决错误 - 预期的布尔值(或无值)以下参数:--train
- c# - 我只能从大约 8 到 9 中提取数据。但我知道我的 HDA 中有更多数据。我的 ReadRaw 数据函数有问题吗?
- django - Django formset:无法保存
- python - 为什么这个递归函数会迅速增加内存使用?
- javascript - 单击功能会无意中在调试器中“创建”一个新的 html 文档
- c# - Unity Vector2.Lerp "t" 没有按预期工作,它很快
- java - Java、Springboot、MongoDB 扩展 SimpleMongoRepository (2020)