如何使用java正则表达式替换字符串
我有一个包含自动关闭锚定标记的文件如何使用java正则表达式替换字符串,java,regex,Java,Regex,我有一个包含自动关闭锚定标记的文件 <p><a name="impact"/><span class="sectiontitle">Impact</span></p> <p><a name="Summary"/><span class="sectiontitle">Summary</span></p> package mypack; import java.io.*
<p><a name="impact"/><span class="sectiontitle">Impact</span></p>
<p><a name="Summary"/><span class="sectiontitle">Summary</span></p>
package mypack;
import java.io.*;
import java.util.regex.*;
public class AnchorIssue {
static int count=0;
public static void main(String[] args) throws IOException {
Pattern pFinder = Pattern.compile("<a name=\\\".*\\\"(\\/)>(.*)(<)");
BufferedReader r = new BufferedReader
(new FileReader("D:/file.txt"));
String line;
while ((line =r.readLine()) != null) {
Matcher m1= pFinder.matcher(line);
while (m1.find()) {
int start = m1.start(0);
int end = m1.end(0);
++count;
// Use CharacterIterator.substring(offset, end);
String actual=line.substring(start, end);
System.out.println(count+"."+"Actual String :-"+actual);
actual.replace(m1.group(1),"");
System.out.println(actual);
actual.replaceAll(m1.group(3),"</a><");
System.out.println(actual);
// Use CharacterIterator.substring(offset, end);
System.out.println(count+"."+"Replaced"+actual);
}
}
r.close();
}
}
影响
总结
我想更正下面的标签
<p><a name="impact"><span class="sectiontitle">Impact</span></a></p>
<p><a name="Summary"><span class="sectiontitle">Summary</span></a></p>
影响
总结
我写这段代码是为了查找和替换不正确的锚标记
<p><a name="impact"/><span class="sectiontitle">Impact</span></p>
<p><a name="Summary"/><span class="sectiontitle">Summary</span></p>
package mypack;
import java.io.*;
import java.util.regex.*;
public class AnchorIssue {
static int count=0;
public static void main(String[] args) throws IOException {
Pattern pFinder = Pattern.compile("<a name=\\\".*\\\"(\\/)>(.*)(<)");
BufferedReader r = new BufferedReader
(new FileReader("D:/file.txt"));
String line;
while ((line =r.readLine()) != null) {
Matcher m1= pFinder.matcher(line);
while (m1.find()) {
int start = m1.start(0);
int end = m1.end(0);
++count;
// Use CharacterIterator.substring(offset, end);
String actual=line.substring(start, end);
System.out.println(count+"."+"Actual String :-"+actual);
actual.replace(m1.group(1),"");
System.out.println(actual);
actual.replaceAll(m1.group(3),"</a><");
System.out.println(actual);
// Use CharacterIterator.substring(offset, end);
System.out.println(count+"."+"Replaced"+actual);
}
}
r.close();
}
}
包mypack;
导入java.io.*;
导入java.util.regex.*;
公共类主播{
静态整数计数=0;
公共静态void main(字符串[]args)引发IOException{
Pattern pFinder=Pattern.compile((.*)(您的问题是贪婪。也就是说,*“
将匹配该行中最后一个”
之前的所有内容。对此有两个修复方法。
两个修复程序都将替换此行:
Pattern pFinder = Pattern.compile("<a name=\\\".*\\\"(\\/)>(.*)(<)");
Pattern pFinder=Pattern.compile(“.您的问题是贪婪。也就是说,*”
将匹配该行中最后一个“
之前的所有内容。对此有两个修复方法。
两个修复程序都将替换此行:
Pattern pFinder = Pattern.compile("<a name=\\\".*\\\"(\\/)>(.*)(<)");
Pattern pFinder=Pattern.compile(“.由于文件结构似乎是“恒定的”,因此最好将问题简化为简单的替换,而不是复杂的html匹配。在我看来,您似乎对锚定标记的内容不太感兴趣,所以只需替换/>,因为文件结构似乎是”常量”,将问题简化为简单的替换而不是复杂的html匹配可能会更好。在我看来,您对锚定标记的内容并不感兴趣,所以只需使用下面的代码替换/>,我就能找到并替换所有自关闭的锚定标记
package mypack;
import java.io.*;
import java.util.regex.*;
public class AnchorIssue {
static int count=0;
public static void main(String[] args) throws IOException {
Pattern pFinder = Pattern.compile("<a name=\\\".*?\\\"(\\/><span)(.*)(<\\/span>)");
BufferedReader r = new BufferedReader
(new FileReader("file.txt"));
String line;
while ((line =r.readLine()) != null) {
Matcher m1= pFinder.matcher(line);
while (m1.find()) {
int start = m1.start(0);
int end = m1.end(0);
++count;
// Use CharacterIterator.substring(offset, end);
String actual=line.substring(start, end);
System.out.println(count+"."+"Actual String : "+actual);
actual= actual.replaceAll(m1.group(1),"><span");
System.out.println("\n");
actual= actual.replaceAll(m1.group(3),"</span></a>");
System.out.println(count+"."+"Replaced : "+actual);
System.out.println("\n");
System.out.println("---------------------------------------------------");
}
}
r.close();
}
}
包mypack;
导入java.io.*;
导入java.util.regex.*;
公共类主播{
静态整数计数=0;
公共静态void main(字符串[]args)引发IOException{
Pattern pFinder=Pattern.compile(“使用下面的代码,我能够找到并替换所有自关闭的锚标记
package mypack;
import java.io.*;
import java.util.regex.*;
public class AnchorIssue {
static int count=0;
public static void main(String[] args) throws IOException {
Pattern pFinder = Pattern.compile("<a name=\\\".*?\\\"(\\/><span)(.*)(<\\/span>)");
BufferedReader r = new BufferedReader
(new FileReader("file.txt"));
String line;
while ((line =r.readLine()) != null) {
Matcher m1= pFinder.matcher(line);
while (m1.find()) {
int start = m1.start(0);
int end = m1.end(0);
++count;
// Use CharacterIterator.substring(offset, end);
String actual=line.substring(start, end);
System.out.println(count+"."+"Actual String : "+actual);
actual= actual.replaceAll(m1.group(1),"><span");
System.out.println("\n");
actual= actual.replaceAll(m1.group(3),"</span></a>");
System.out.println(count+"."+"Replaced : "+actual);
System.out.println("\n");
System.out.println("---------------------------------------------------");
}
}
r.close();
}
}
包mypack;
导入java.io.*;
导入java.util.regex.*;
公共类主播{
静态整数计数=0;
公共静态void main(字符串[]args)引发IOException{
Pattern pFinder=Pattern.compile("嗯,在这篇文章中,有一个很好的答案是关于用正则表达式解析HTML:这通常是正确的。但是,在一些边缘情况下,比如这一个,你可以使用正则表达式来帮助你编辑文件。另外,一些正则表达式引擎可以处理递归。我知道,这在理论上不再是常规的。不过,它们是正则表达式。这是我写的关于这一点的文章主题:嗯,在这篇文章中,有一个很好的答案是关于用正则表达式解析HTML:这通常是正确的。但是,在一些边缘情况下,比如这一个,你可以使用正则表达式来帮助你编辑文件。另外,一些正则表达式引擎可以处理递归。我知道,理论上这不再是常规的。不过,它们是正则表达式。这是我的writeup ab我们来谈谈这个话题: