java正则表达式怎么定义只替换中间的字符

Python09

java正则表达式怎么定义只替换中间的字符,第1张

可以使用分组来完成,替换字符串中使用$1、$2、$3……可以获取对应组的匹配结果。如果前后的字符串是固定的那更简单,直接在替换的时候写上就好了。

因为String的replaceAll就是使用的正则表达式所以示例直接使用的String的替换,Pattern的替换同理。

public class Demo {

    public static void main(String[] args) {

        String str = "aa文字1bb哈哈cc测试dx,测试字符串aa1234bb"

        // 替换aa、bb之间的字符串为 "成功"

        String str1 = str.replaceAll("aa.*?bb", "aa成功bb")

        System.out.println(str1)

        // 替换aa、bb之间的字符串为 "成功"

        String str2 = str.replaceAll("(aa).*?(bb)", "$1成功$2")

        System.out.println(str2)

        // 替换小写字母之间的字符串为 "成功"

        String str3 = str.replaceAll("([a-z]+).*?([a-z]+)", "$1成功$2")

        System.out.println(str3)

    }

}

一:思路:

使用java方法replaceAll()通过正则表达式匹配替换掉所有的字母。

二:代码如下(可直接复制出来运行,在控制台中查看效果):

public static void main(String[] args){

    String str="abc123123成你懂吗bxcxsaf"

    //通过正则表达式替换掉所有的字母

    String strNew = str.replaceAll("[a-zA-Z]","")

    System.out.println(strNew)

}

运行结果如下:

三:扩展(正则表达式)

正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多情况下,通常被用来,检索和替换符合某个规则的文本。

PS:有兴趣可以深入研究一下正则表达式的语法,及规则。

String s = "<A class=test id=\"123\" name=张三 tt=kk()>这里不替换 test=no kakaka</A><C class=sss /><B class=a id=\"b\" name=c></B>"

System.out.println(s)

System.out.println("------------------------------------------")

String s1 = s.replaceAll("=([^'\">\\s]+)(\\s|>)","=\"$1\"$2")

System.out.println(s1)

//----------------------------------------

输出的结果是

<A class=test id="123" name=张三 tt=kk()>这里不替换 test=no kakaka</A><C class=sss /><B class=a id="b" name=c></B>

------------------------------------------

<A class="test" id="123" name="张三" tt="kk()">这里不替换 test="no" kakaka</A><C class="sss" /><B class="a" id="b" name="c"></B>

为了非标签内的=号,可能得使用预查找,但测试有点问题就暂时不贴上来了,如果要求不是很严格,这个是可以凑活着用的

//=====和楼主讨论中发现一个奇怪问题,就是[^'\">\\s]不能正确匹配到中文(楼主的jdk1.4就会漏掉中文)。

经过测试,在1.4以及以后的版本,下面这个是可行的

String s1 = s.replaceAll("=(?!['\"])(.*?)(\\s|>)","=\"$1\"$2")