java正则表达式以空格分割,xml中的空格除外
我得到了一些带有XML标记的英语句子,例如:java正则表达式以空格分割,xml中的空格除外,java,regex,Java,Regex,我得到了一些带有XML标记的英语句子,例如: word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12. 正如这句话所示,xml标记有三种可能(,,)。这些标记中的字数可以是无限的 我需要在空白处分割它们,忽略那些XML标记中的空白。代码如下所示: String mySentence = "<XXX>word1</XXX> word2 word3 <YYY>word4
word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12.
正如这句话所示,xml标记有三种可能(
,
,
)。这些标记中的字数可以是无限的
我需要在空白处分割它们,忽略那些XML标记中的空白。代码如下所示:
String mySentence = "<XXX>word1</XXX> word2 word3 <YYY>word4 word5 word6</YYY> word7 word8 word9 word10 <ZZZ>word11 word12</ZZZ>.";
String[] mySentenceSplit = mySentence.split("someUnknownRegex");
for (int i = 0; i < mySentenceSplit.length; i++) {
System.out.println(mySentenceSplit[i]);
}
String mycentence=“word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12。”;
String[]mycentencesplit=mycentence.split(“someUnknownRegex”);
for(int i=0;i
具体而言,对于上述示例,输出应如下所示:
mySentenceSplit[0] = <XXX>word1</XXX>
mySentenceSplit[1] = word2
mySentenceSplit[2] = word3
mySentenceSplit[3] = <YYY>word4 word5 word6</YYY>
mySentenceSplit[4] = word7
mySentenceSplit[5] = word8
mySentenceSplit[6] = word9
mySentenceSplit[7] = word10
mySentenceSplit[8] = <ZZZ>word11 word12</ZZZ>.
mycentencesplit[0]=word1
mycentencesplit[1]=word2
mycentencesplit[2]=word3
mycentencesplit[3]=word4 word5 word6
mycentencesplit[4]=word7
mycentencesplit[5]=word8
mycentencesplit[6]=word9
mycentencesplit[7]=word10
mycentencesplit[8]=word11-word12。
要实现这一点,我必须在“someUnknownRegex”中插入什么?使用捕获组和反向引用:
String sentence = "<XXX>word1</XXX> word2 word3 <YYY>word4 word5 word6</YYY> word7 word8 word9 word10 <ZZZ>word11 word12</ZZZ>.";
Pattern pattern = Pattern.compile("<(\\w+)[^>]*>.*?</\\1>\\.?|\\S+");
Matcher matcher = pattern.matcher(sentence);
while (matcher.find()) {
System.out.println(matcher.group());
}
String-station=“word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12。”;
Pattern=Pattern.compile(“]*>.\\.?\\\\S+”;
Matcher Matcher=pattern.Matcher(句子);
while(matcher.find()){
System.out.println(matcher.group());
}
输出:
<XXX>word1</XXX>
word2
word3
<YYY>word4 word5 word6</YYY>
word7
word8
word9
word10
<ZZZ>word11 word12</ZZZ>.
word1
字2
字3
单词4单词5单词6
字7
字8
字9
字10
单词11单词12。
使用捕获组和反向引用:
String sentence = "<XXX>word1</XXX> word2 word3 <YYY>word4 word5 word6</YYY> word7 word8 word9 word10 <ZZZ>word11 word12</ZZZ>.";
Pattern pattern = Pattern.compile("<(\\w+)[^>]*>.*?</\\1>\\.?|\\S+");
Matcher matcher = pattern.matcher(sentence);
while (matcher.find()) {
System.out.println(matcher.group());
}
String-station=“word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12。”;
Pattern=Pattern.compile(“]*>.\\.?\\\\S+”;
Matcher Matcher=pattern.Matcher(句子);
while(matcher.find()){
System.out.println(matcher.group());
}
输出:
<XXX>word1</XXX>
word2
word3
<YYY>word4 word5 word6</YYY>
word7
word8
word9
word10
<ZZZ>word11 word12</ZZZ>.
word1
字2
字3
单词4单词5单词6
字7
字8
字9
字10
单词11单词12。
使用捕获组和反向引用:
String sentence = "<XXX>word1</XXX> word2 word3 <YYY>word4 word5 word6</YYY> word7 word8 word9 word10 <ZZZ>word11 word12</ZZZ>.";
Pattern pattern = Pattern.compile("<(\\w+)[^>]*>.*?</\\1>\\.?|\\S+");
Matcher matcher = pattern.matcher(sentence);
while (matcher.find()) {
System.out.println(matcher.group());
}
String-station=“word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12。”;
Pattern=Pattern.compile(“]*>.\\.?\\\\S+”;
Matcher Matcher=pattern.Matcher(句子);
while(matcher.find()){
System.out.println(matcher.group());
}
输出:
<XXX>word1</XXX>
word2
word3
<YYY>word4 word5 word6</YYY>
word7
word8
word9
word10
<ZZZ>word11 word12</ZZZ>.
word1
字2
字3
单词4单词5单词6
字7
字8
字9
字10
单词11单词12。
使用捕获组和反向引用:
String sentence = "<XXX>word1</XXX> word2 word3 <YYY>word4 word5 word6</YYY> word7 word8 word9 word10 <ZZZ>word11 word12</ZZZ>.";
Pattern pattern = Pattern.compile("<(\\w+)[^>]*>.*?</\\1>\\.?|\\S+");
Matcher matcher = pattern.matcher(sentence);
while (matcher.find()) {
System.out.println(matcher.group());
}
String-station=“word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12。”;
Pattern=Pattern.compile(“]*>.\\.?\\\\S+”;
Matcher Matcher=pattern.Matcher(句子);
while(matcher.find()){
System.out.println(matcher.group());
}
输出:
<XXX>word1</XXX>
word2
word3
<YYY>word4 word5 word6</YYY>
word7
word8
word9
word10
<ZZZ>word11 word12</ZZZ>.
word1
字2
字3
单词4单词5单词6
字7
字8
字9
字10
单词11单词12。
这是您想要的拆分正则表达式:
String[] split = str.split(" +(?=[^<]*(<[^/]|$)");
String[]split=str.split(“+(?=[^这是您想要的split正则表达式:
String[] split = str.split(" +(?=[^<]*(<[^/]|$)");
String[]split=str.split(“+(?=[^这是您想要的split正则表达式:
String[] split = str.split(" +(?=[^<]*(<[^/]|$)");
String[]split=str.split(“+(?=[^这是您想要的split正则表达式:
String[] split = str.split(" +(?=[^<]*(<[^/]|$)");
String[]split=str.split(“+(?=[^kiltek),重新提出这个问题,因为它有一个简单的正则表达式解决方案,但没有提到。(在对一个问题进行研究时发现了您的问题。)
关于使用正则表达式解析xml的所有免责声明,下面是一个简单的正则表达式:
<.*?</[^>]*>|( )
|()
替换的左侧匹配完整的xml标记。我们将忽略这些匹配。右侧匹配并捕获组1中的空格,我们知道它们是右侧空格,因为左侧的表达式不匹配它们
以下是工作代码(请参阅):
import java.util.*;
导入java.io.*;
导入java.util.regex.*;
导入java.util.List;
班级计划{
公共静态void main(字符串[]args)引发java.lang.Exception{
字符串主题=“word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12”;
Pattern regex=Pattern.compile(“|()”);
Matcher m=正则表达式Matcher(主题);
StringBuffer b=新的StringBuffer();
while(m.find()){
如果(m.group(1)!=null)m.appendReplacement(b,“SplitHere”);
其余m组(b,m组(0));
}
m、 附件(b);
字符串替换=b.toString();
String[]splits=replaced.split(“SplitHere”);
对于(字符串拆分:拆分)System.out.println(拆分);
}//末端总管
}//结束程序
参考
kiltek,重新提出这个问题,因为它有一个简单的regex解决方案,但没有提到。(在为一个项目做一些研究时发现了您的问题。)
关于使用正则表达式解析xml的所有免责声明,下面是一个简单的正则表达式:
<.*?</[^>]*>|( )
|()
替换的左侧匹配完整的xml标记。我们将忽略这些匹配。右侧匹配并捕获组1中的空格,我们知道它们是右侧空格,因为左侧的表达式不匹配它们
以下是工作代码(请参阅):
import java.util.*;
导入java.io.*;
导入java.util.regex.*;
导入java.util.List;
班级计划{
公共静态void main(字符串[]args)引发java.lang.Exception{
字符串主题=“word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12”;
Pattern regex=Pattern.compile(“|()”);
Matcher m=正则表达式Matcher(主题);
StringBuffer b=新的StringBuffer();
while(m.find()){
如果(m.group(1)!=null)m.appendReplacement(b,“SplitHere”);
其余m组(b,m组(0));
}
m、 附件(b);
字符串替换=b.toString();
String[]splits=replaced.split(“SplitHere”);
对于(字符串拆分:拆分)System.out.println(拆分);
}//末端总管
}//结束程序
参考
kiltek,重新提出这个问题,因为它有一个简单的正则表达式解决方案