我想在正则表达式模式上拆分String和绝望。
我需要将像这样的字符串:Hi I want "to split" this (String)
拆分为这样的String数组:
String [] array = {"Hi", "I", "want", """, "to", "split", """, "this", "(", "string", ")"};
这是我尝试过的,但它删除了分隔符。
public static void main(String[] args) {
String string = "Hi \"why should\" (this work)";
String[] array;
array = string.split("\\s"
+ "|\\s(?=\")"
+ "|\\w(?=\")"
+ "|\"(?=\\w)"
+ "|\\s(?=\\()"
+ "|\\w(?=\\))"
+ "|\\((?=\\w)");
for (String str : array) {
System.out.println(str);
}
}
结果:
Hi
why
shoul
"
this
wor
)
答案 0 :(得分:0)
您可以将令牌与正则表达式B
进行匹配,假设您希望标点符号以不同的标记结束:
\w+|[\w\s]
输出ArrayList包含:
String input = "Hi I want \"to split\" this (String).";
Matcher matcher = Pattern.compile("\\w+|[^\\w\\s]").matcher(input);
List<String> out = new ArrayList<>();
while (matcher.find()) {
out.add(matcher.group());
}
您可能希望使用[Hi, I, want, ", to, split, ", this, (, String, ), .]
标志使(?U)
和\w
遵循Unicode和空白字符的Unicode定义。默认情况下,\s
和\w
仅识别ASCII范围内的单词和空白字符。
为了完整起见,这里是\s
中的解决方案,它适用于Java 8及更高版本。 Java 7中的开头会有一个额外的空字符串。
split()
正则表达式相当复杂,因为空字符串在标点字符和单词字符之间拆分需要避免已经被String tokens[] = input.split("\\s+|(?<![\\w\\s])(?=\\w)|(?<=\\w)(?![\\w\\s])|(?<=[^\\w\\s])(?=[^\\w\\s])");
拆分的情况。
由于拆分解决方案中的正则表达式非常混乱,请使用匹配解决方案。
答案 1 :(得分:-1)
你想用什么语言写这个?
您可以编写正则表达式组,例如:(。+)(\ s)
这将匹配任意数量的字符,后跟空格