Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java正则表达式以空格分割,xml中的空格除外_Java_Regex - Fatal编程技术网

java正则表达式以空格分割,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

我得到了一些带有XML标记的英语句子,例如:

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,重新提出这个问题,因为它有一个简单的正则表达式解决方案