Java 匹配器。appendReplacement未添加起始内容 公共类TestUtil{ 公共静态void main(字符串[]args){ StringBuffer测试=新的StringBuffer(); 测试。附加(“ABABCDIDFSLHFADSKLJFHDSKH ADSFKJFHAS lkajdsfhak dsjfhs akhasdf adsjkfh asldjkfhds GLAKDFH dghkads ghklgh asdflkghadfkl1.直立人、颏部、颏部前突、牙列近位;下切牙勃起。”; 测试。附加(“BBBBBBBBBBBBBB1.Geschl.sHomo.Serctus,sbimanus.Mentoprominulo.Dentibus aequaliter Proximatis;下切牙勃起。”; Pattern=Pattern.compile(“\\d+\\.\\s*?”, 模式(不区分大小写); Matcher regexMatcher=pattern.Matcher(test.toString()); 系统输出打印LN(测试); test.delete(0,test.length()); while(regexMatcher.find()){ //test.delete(regexMatcher.start(),test.length()); 字符串匹配=regexMatcher.group(0); pattermpatter=Pattern.compile(“()(.*?)”); 匹配器termMatcher=termPatter.Matcher(匹配); 如果(termMatcher!=null){ //termMatcher.start(); System.out.println(termMatcher.groupCount()); while(termMatcher.find()){ System.out.println(“0----”+术语匹配器组(0)); System.out.println(termMatcher.group(1)); System.out.println(termMatcher.group(2)); 系统输出打印LN(术语匹配器组(3)); 系统输出打印LN(术语匹配器组(4)); termMatcher.appendReplacement(测试,appendSortKey(termMatcher.group(0)、termMatcher.group(1)、termMatcher.group(2)、termMatcher.group(3)、termMatcher.group(4)); } termMatcher.appendTail(测试); } //regexMatcher.appendTail(测试); } 系统输出打印LN(测试); } 私有静态字符串appendortKey(字符串totStr、字符串termStart、字符串termStartEndTag、字符串termValue、字符串termEndTag){ //TODO自动生成的方法存根 如果(totStr!=null){ termStart=termStart++“sortKey=\”“+termValue++“\”“+termStartEndTag; 返回termStart+termValue+termEndTag; } 返回null; } }
试图通过从另一个正则表达式的匹配器获取内容(作为条件)来仅操纵Java 匹配器。appendReplacement未添加起始内容 公共类TestUtil{ 公共静态void main(字符串[]args){ StringBuffer测试=新的StringBuffer(); 测试。附加(“ABABCDIDFSLHFADSKLJFHDSKH ADSFKJFHAS lkajdsfhak dsjfhs akhasdf adsjkfh asldjkfhds GLAKDFH dghkads ghklgh asdflkghadfkl1.直立人、颏部、颏部前突、牙列近位;下切牙勃起。”; 测试。附加(“BBBBBBBBBBBBBB1.Geschl.sHomo.Serctus,sbimanus.Mentoprominulo.Dentibus aequaliter Proximatis;下切牙勃起。”; Pattern=Pattern.compile(“\\d+\\.\\s*?”, 模式(不区分大小写); Matcher regexMatcher=pattern.Matcher(test.toString()); 系统输出打印LN(测试); test.delete(0,test.length()); while(regexMatcher.find()){ //test.delete(regexMatcher.start(),test.length()); 字符串匹配=regexMatcher.group(0); pattermpatter=Pattern.compile(“()(.*?)”); 匹配器termMatcher=termPatter.Matcher(匹配); 如果(termMatcher!=null){ //termMatcher.start(); System.out.println(termMatcher.groupCount()); while(termMatcher.find()){ System.out.println(“0----”+术语匹配器组(0)); System.out.println(termMatcher.group(1)); System.out.println(termMatcher.group(2)); 系统输出打印LN(术语匹配器组(3)); 系统输出打印LN(术语匹配器组(4)); termMatcher.appendReplacement(测试,appendSortKey(termMatcher.group(0)、termMatcher.group(1)、termMatcher.group(2)、termMatcher.group(3)、termMatcher.group(4)); } termMatcher.appendTail(测试); } //regexMatcher.appendTail(测试); } 系统输出打印LN(测试); } 私有静态字符串appendortKey(字符串totStr、字符串termStart、字符串termStartEndTag、字符串termValue、字符串termEndTag){ //TODO自动生成的方法存根 如果(totStr!=null){ termStart=termStart++“sortKey=\”“+termValue++“\”“+termStartEndTag; 返回termStart+termValue+termEndTag; } 返回null; } },java,regex,Java,Regex,试图通过从另一个正则表达式的匹配器获取内容(作为条件)来仅操纵…,但在开始和结束时丢失了内容,请告诉我我所犯的错误 预期产量为 public class TestUtil { public static void main(String[] args) { StringBuffer test = new StringBuffer(); test.append("abacbsidfslhfadskljfhdskh adsfkjlhdslkfhas lk
public class TestUtil {
public static void main(String[] args) {
StringBuffer test = new StringBuffer();
test.append("abacbsidfslhfadskljfhdskh adsfkjlhdslkfhas lkajdsfhak dsjfhs akhasdf adsjkfh asldjkfhds glakdshgf dghkads ghklgh asdflkghadfkl <p rendition=\"#indent-1\">1. Geschl. <hi rendition=\"#r\"> <hi rendition=\"#smcap\"> <hi rendition=\"#wide\"><term xml:lang=\"la\">Homo</term></hi> </hi>. <term xml:lang=\"la\">Erectus</term>, <term xml:lang=\"la\">bimanus</term>. Mentoprominulo. Dentibus aequaliter approximatis; incisoribus inferioribus erectis.</hi> </p>");
test.append("bbbbbbbbbbbbbbbbbbbbbb <p rendition=\"#indent-1\">1. Geschl. <hi rendition=\"#r\"> <hi rendition=\"#smcap\"> <hi rendition=\"#wide\"><term xml:lang=\"la\">sHomo</term></hi> </hi>. <term xml:lang=\"la\">sErectus</term>, <term xml:lang=\"la\">sbimanus</term>. Mentoprominulo. Dentibus aequaliter approximatis; incisoribus inferioribus erectis.</hi> </p>");
Pattern pattern = Pattern.compile("<p rendition=\"#indent-1\">\\d+\\.\\s*.*?</p>",
Pattern.CASE_INSENSITIVE);
Matcher regexMatcher = pattern.matcher(test.toString());
System.out.println(test);
test.delete(0, test.length());
while (regexMatcher.find()) {
// test.delete(regexMatcher.start(),test.length());
String matched =regexMatcher.group(0);
Pattern termPatter=Pattern.compile("(<term xml:lang=\".*?\")(>)(.*?)(</term>)");
Matcher termMatcher = termPatter.matcher(matched);
if(termMatcher != null){
//termMatcher.start();
System.out.println(termMatcher.groupCount());
while (termMatcher.find()) {
System.out.println("0---"+termMatcher.group(0));
System.out.println(termMatcher.group(1));
System.out.println(termMatcher.group(2));
System.out.println(termMatcher.group(3));
System.out.println(termMatcher.group(4));
termMatcher.appendReplacement(test, appendSortKey(termMatcher.group(0),termMatcher.group(1),termMatcher.group(2),termMatcher.group(3),termMatcher.group(4)));
}
termMatcher.appendTail(test);
}
//regexMatcher.appendTail(test);
}
System.out.println(test);
}
private static String appendSortKey(String totStr, String termStart, String termStartEndTag, String termValue, String termEndTag) {
// TODO Auto-generated method stub
if(totStr!=null){
termStart = termStart+" "+"sortKey=\""+termValue+"\""+termStartEndTag;
return termStart+termValue+termEndTag;
}
return null;
}
}
ababcbsidfslhfadskljfhdskh adsfkhas lkajdsfhak dsjfhs akhasdf adsjkfh asldjkfhds glakdshgf dghkads ghklh asdflkhadfkl1。格施。人类。直立人。曼托普罗米诺。近似牙本质;下切牙勃起
bbbbbbbbbbbb1。Geschl.>肖莫。塞雷特斯,斯比曼努斯。曼托普罗米诺。近似牙本质;下切牙勃起
更改以下代码行,它将给出正确的结果
abacbsidfslhfadskljfhdskh adsfkjlhdslkfhas lkajdsfhak dsjfhs akhasdf adsjkfh asldjkfhds glakdshgf dghkads ghklgh asdflkghadfkl <p rendition="#indent-1">1. Geschl. <hi rendition="#r"> <hi rendition="#smcap"> <hi rendition="#wide"><term xml:lang="la" sortKey="Homo">Homo</term></hi> </hi>. <term xml:lang="la" sortKey="Erectus">Erectus</term>, <term xml:lang="la"sortKey="bimanus" >bimanus</term>. Mentoprominulo. Dentibus aequaliter approximatis; incisoribus inferioribus erectis.</hi> </p>bbbbbbbbbbbbbbbbbbbbbb <p rendition="#indent-1">1. Geschl. <hi rendition="#r"> <hi rendition="#smcap"> <hi rendition="#wide">><term xml:lang="la" sortKey="sHomo">sHomo</term></hi> </hi>. <term xml:lang="la" sortKey="sErectus">sErectus</term>, <term xml:lang="la"sortKey="sbimanus" >sbimanus</term>. Mentoprominulo. Dentibus aequaliter approximatis; incisoribus inferioribus erectis.</hi> </p>
Pattern=Pattern.compile(“.*\\d+\\.\\s*?
”,
模式(不区分大小写);
/*
而不是下面的
Pattern=Pattern.compile(“\\d+\\.\\s*?
”,
模式(不区分大小写);
*/
说明:
零件匹配\\d+\\.\\s*?
part,因此appendReplacement只追加
更换零件
部分将匹配*
\\d+\\.\\s*?
,因此在更换附件后,您将获得文本
带替换件李>文本
因此,输出将是整个字符串,
text
替换为text
不满足您的要求。我得到的输出是
。您想要什么作为输出?感谢您的快速回复,我正在查找整个测试字符串,其中只添加了sortkey附加术语标记。您可以将您期望的字符串作为问题的一部分吗?就像在问题的末尾一样,输入:预期输出:您想要的实际字符串”。这将帮助我们理解要求。我已经发布了一个答案,请检查这是否适用于您。
Pattern pattern = Pattern.compile(".*<p rendition=\"#indent-1\">\\d+\\.\\s*.*?</p>",
Pattern.CASE_INSENSITIVE);
/*
instead of the following
Pattern pattern = Pattern.compile("<p rendition=\"#indent-1\">\\d+\\.\\s*.*?</p>",
Pattern.CASE_INSENSITIVE);
*/