java中的ReX模式匹配和替换,用于中间的字符串模式

java中的ReX模式匹配和替换,用于中间的字符串模式,java,regex,Java,Regex,我有一些大型文档,其中包含一些字符串,如下所示: <font face='Greek1'>D</font> Pattern pattern = Pattern.compile(MYREGEX); Matcher matcher = pattern.matcher(MYSTRING); String clean = matcher.replaceAll(""); 我写了这个正则表达式: (<font face='[A-z0-9]*'>) 有没有一种方法

我有一些大型文档,其中包含一些字符串,如下所示:

<font face='Greek1'>D</font>  
Pattern pattern = Pattern.compile(MYREGEX);
Matcher matcher = pattern.matcher(MYSTRING);
String clean = matcher.replaceAll("");
我写了这个正则表达式:

(<font face='[A-z0-9]*'>)
有没有一种方法可以编写一个在第一部分和第二部分都找到并替换的模式:

   <font face='Greek1'>D</font>
第二部分:

   </font> 

将><之间的任意字符保留在原位?或者我必须将它们作为两个单独的正则表达式来执行吗?

您可以使用|作为正则表达式,它应该同时替换这两个正则表达式。

对于您的特定示例,这将起作用:

String s = "<font face='Greek1'>D</font>";
String value = s.replaceAll("(<.*?>)(.*?)(</.*?>)", "$2"); // D
实质上:

匹配零件-零件?是否有防止正则表达式匹配整个字符串的方法 第二组是你的价值观 第三组是结束标记 $2表示第二组,即值 你可以试试看


您可以使用非贪婪正则表达式,并可以执行以下操作:

String value = s.replaceAll(".*?>(\\w+)<.*?", "$1"); 
只有D

如果只想删除精确的文本,则可以使用:

String value = s.replaceAll("<font.*?>(\\w+)</font>", "$1"); 

谢谢你能给我解释一下吗?还有,在相当大的字符串上使用matcher示例和此replaceAll示例之间是否存在性能差异?@NathanielWaggoner很难对性能进行评论-您需要使用实际数据对各种选项进行基准测试才能发现。感谢您的解释!您好,谢谢,我实际上想替换介于之间的字符,而不使用><之间的字符。根据排除的类型,我认为这不是重复。我想查找并替换字符串,同时保留被替换内容的部分不变。相关问题是关于另一类问题。
String s = "<font face='Greek1'>D</font>";
String value = s.replaceAll("(<.*?>)(.*?)(</.*?>)", "$2"); // D
System.out.println("<font face='Greek1'>D</font>".replaceAll("<.*?>", "")); // D
String value = s.replaceAll(".*?>(\\w+)<.*?", "$1"); 
<font face='Greek1'>D</font>
String value = s.replaceAll("<font.*?>(\\w+)</font>", "$1");