Java 同时提取匹配和不匹配正则表达式
我有一个像这样的字符串abc3a de'f gHi?jk我想把它分成子字符串abc3a,de'f,gHi?还有jk。换句话说,我想返回与正则表达式[a-zA-Z0-9']匹配的字符串和与此正则表达式不匹配的字符串。如果有一种方法可以判断每个结果子字符串是否匹配,这将是一个加号Java 同时提取匹配和不匹配正则表达式,java,regex,Java,Regex,我有一个像这样的字符串abc3a de'f gHi?jk我想把它分成子字符串abc3a,de'f,gHi?还有jk。换句话说,我想返回与正则表达式[a-zA-Z0-9']匹配的字符串和与此正则表达式不匹配的字符串。如果有一种方法可以判断每个结果子字符串是否匹配,这将是一个加号 谢谢 您可以使用此正则表达式: "[a-zA-Z0-9']+|[^a-zA-Z0-9' ]+" 将提供: ["abc3a", "de'f", "gHi", "?", "jk"] 在线演示: Java代码: 输出 在该字
谢谢 您可以使用此正则表达式:
"[a-zA-Z0-9']+|[^a-zA-Z0-9' ]+"
将提供:
["abc3a", "de'f", "gHi", "?", "jk"]
在线演示:
Java代码:
输出
在该字符集中字符行之间的所有边界上拆分
后面的人?
输出:
Match:abc3a
Miss: ` `
Match:de'f
Miss: ` `
Match:gHi
Miss: `?`
Match:jk
如果你不想要空白
Pattern pattern = Pattern.compile("([a-zA-Z0-9']*)?([^a-zA-Z0-9'\\s]*)?");
输出:
Match:abc3a
Match:de'f
Match:gHi
Miss: `?`
Match:jk
可以使用锚点进行拆分
private static String[] splitString(final String s) {
final String [] arr = s.split("(?=[^a-zA-Z0-9'])|(?<=[^a-zA-Z0-9'])");
final ArrayList<String> strings = new ArrayList<String>(arr.length);
for (final String str : arr) {
if(!"".equals(str.trim())) {
strings.add(str);
}
}
return strings.toArray(new String[strings.size()]);
}
?=xxx意味着xxx将跟随这里,所以基本上你在[?!]处拆分字符串,或者你的计划是什么?你可以否定它,[^a-zA-Z0-9']@我在[a-zA-Z0-9']之外的任何字符串上拆分的构造函数,例如:@J.p.如果我否定它,我将切换到另一侧。我要匹配字符串和不匹配字符串。@gtgaxiola,谢谢。固定的
Match:abc3a
Miss: ` `
Match:de'f
Miss: ` `
Match:gHi
Miss: `?`
Match:jk
Pattern pattern = Pattern.compile("([a-zA-Z0-9']*)?([^a-zA-Z0-9'\\s]*)?");
Match:abc3a
Match:de'f
Match:gHi
Miss: `?`
Match:jk
private static String[] splitString(final String s) {
final String [] arr = s.split("(?=[^a-zA-Z0-9'])|(?<=[^a-zA-Z0-9'])");
final ArrayList<String> strings = new ArrayList<String>(arr.length);
for (final String str : arr) {
if(!"".equals(str.trim())) {
strings.add(str);
}
}
return strings.toArray(new String[strings.size()]);
}