正则表达式学了忘忘了学太痛苦了,请csdn每天用比较熟悉的同学帮帮忙。要求:给定html字符串,将图片链接中的文件名中空格去掉原字符串例子:String s1 = 'ttached muscles. </P><P align=center><IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/eye_ anatomy 1.jpg" width=350 bord'去除后字符串:String s2 = 'ttached muscles. </P><P align=center><IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/eye_anatomy1.jpg" width=350 bord'可以确定的是'src="file:///android_asset/images/'肯定存在, 图片链接肯帝有扩展名,有可能是.bmp,.gif,.jpg等等,字符串中可能有若干图片链接,分不够我可以回帖补.有什么问题可以留言谢谢

解决方案 »

  1.   


    StringBuilder input = new StringBuilder(
    "<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_ anatomy1.jpg\" width=350 bord' />");
    Pattern p = Pattern.compile("(?i)<img.*?src=\".*/(.*)\".*?>");
    Matcher m = p.matcher(input);
    m.find();

    String group = m.group(1);
    int start = m.start(1);
    int end = m.end(1); input = input.replace(start, end, group.replaceAll(" ", ""));
    System.out.println(input);
      

  2.   

    不用去匹配,去掉空格就行了
    public class Regex {
    public static void main(String[] args) {
    String s="file:///android_asset/images/eye_ anatomy 1.jpg";
    String str=s.replaceAll("\\s*","");
    System.out.print(str);
    }}
      

  3.   

    支持替换多个图片链接:public static void main(String[] args) {
    String str = "ttached muscles. </P><P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_ anatomy 1.jpg\" width=350 bord src=\"file:///android_asset/images/e2e_ ana2222omy 2.jpg";
    Pattern p = Pattern.compile("(?<=src=\"file:///android_asset/images/).*?\\s+.*?(?=\\.[bmp|gif|jpg])");
    Matcher m = p.matcher(str);
    while(m.find()){
    int start = m.start();
    int end = m.end();
    str = str.substring(0, start) + m.group().replaceAll("\\s", "") + str.substring(end,str.length());
    }
    System.out.println(str);
    }
      

  4.   


    public static void main(String[] args) {
    String str = "'ttached muscles. </P><P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_ anatomy 1.jpg\" width=350 bord'";
    str += "'ttached muscles. </P><P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_ anatomy 1.jpg\" width=350 bord'";
    StringBuffer sb = new StringBuffer(str);
    Matcher m = Pattern.compile("(?i)(file:///.*?/)([\\w\\s]+)(\\.\\w+)").matcher(str);
    while(m.find()){
    sb = sb.replace(m.start(2), m.end(2), m.group(2).replaceAll(" ", ""));
    }
    System.out.println(sb.toString());
    }
      

  5.   


    public static void main(String[] args)
    {
    String str = "ttached muscles. </P><P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_ a n a t o m y 1.jpg\" width=350 bord src=\"file:///android_asset/images/e2e_ ana2222omy 2.jpg\" end";
    Pattern p = Pattern
            .compile("(.*?)(src=\"file:///android_asset/images/)(.*?\\s+.*?)(\")");
    Matcher m = p.matcher(str);
    StringBuilder sb = new StringBuilder("");
    int i = 0;
    while (m.find()) {
    sb.append(m.group(1)).append(m.group(2)).append(
            m.group(3).replaceAll("\\s+", "")).append(m.group(4));
    i = m.end();
    }
    sb.append(str.substring(i, str.length()));
    System.out.println(sb.toString());
    }4楼  5楼都有同一个问题, 多加几个空格就能很明显的看出来.
      

  6.   

    alt="eye_anatomy 1.jpg"楼主这个好像也要替换呢。去掉空格
    /**
     * @param args
     */
    public static void main(String[] args) {
    String reg = "src=\"file:///android_asset/images/([^\"]+)\"";
    Pattern pattern = Pattern.compile(reg);
    System.out.println(pattern.toString());

    Matcher matcher = pattern
    .matcher("ttached muscles. </P><P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_ anatomy 1.jpg\" width=350 bord");

    StringBuffer sb = new StringBuffer();

    while (matcher.find()) {
    String src=matcher.group(0); matcher.appendReplacement(sb,src.replaceAll("\\s",""));
    }
    matcher.appendTail(sb);
    System.out.println(sb); }
      

  7.   

    恩,有些问题,但是问题容易就改掉了,仍然又比较简单的方法public static void main(String[] args) {
    String str = "ttached muscles. </P><P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_ an a      tomy 1.jpg\" width=350 bord src=\"file:///android_asset/images/e2e_ ana2222omy 2.jpg";
    Pattern p = Pattern.compile("(?<=src=\"file:///android_asset/images/).*?\\s+.*?(?=\\.[bmp|gif|jpg])");
    Matcher m = p.matcher(str);
    while(m.find()){
    int start = m.start();
    int end = m.end();
    str = str.substring(0, start) + m.group().replaceAll("\\s", "") + str.substring(end,str.length());
    m = p.matcher(str);
    }
    System.out.println(str);
    }
      

  8.   

    谢谢这位同学,不过你的code只能替换一个
      

  9.   

    谢谢这位朋友, 但我用以下字符串测试不对:public class reg {
        public static void main(String[] args) {
            String str = "\r\n<P align=center>\r\n"
                    + "<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy 1  .jpg\" width=350 border=0></P> fd ssda f \r\n"
                    + "fd  <P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/  eye_anato  my 1 .bmp\" width=350 border=0></P>\r\n"
                    + "\r\n<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy1.png\" width=350 border=0>\r\n";        Pattern p = Pattern.compile("(.*?)(src=\"file:///android_asset/images/)(.*?\\s+.*?)(\")");
            Matcher m = p.matcher(str);
            StringBuilder sb = new StringBuilder("");
            int i = 0;
            while (m.find()) {
                sb.append(m.group(1)).append(m.group(2)).append(m.group(3).replaceAll("\\s+", "")).append(m.group(4));
                i = m.end();
            }
            sb.append(str.substring(i, str.length()));
            System.out.println(sb.toString());
        }
    }结果为:<IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/eye_anatomy1.jpg"fd  <P align=center><IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/eye_anatomy1.bmp" width=350 border=0></P><IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/eye_anatomy1.png" width=350 border=0>
      

  10.   


    谢谢,但也有些问题:    public static void main(String[] args) {
            String str = "\r\n<P align=center>\r\n"
                    + "<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy 1  .jpg\" width=350 border=0></P> fd ssda f \r\n"
                    + "fd  <P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/  eye_anato  my 1 .bmp\" width=350 border=0></P>\r\n"
                    + "\r\n<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy1.png\" width=350 border=0>\r\n";        StringBuffer sb = new StringBuffer(str);
            Matcher m = Pattern.compile("(?i)(file:///.*?/)([\\w\\s]+)(\\.\\w+)").matcher(str);
            while (m.find()) {
                sb = sb.replace(m.start(2), m.end(2), m.group(2).replaceAll(" ", ""));
            }
            System.out.println(sb.toString());
        }
    <P align=center>
    <IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/eye_anatomy1.jpg" width=350 border=0></P> fd ssda f 
    fd  <P align=center><IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/  eeye_anatomy1p" width=350 border=0></P><IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/eye_anatoeye_anatomy1th=350 border=0>
      

  11.   


    public static void main(String[] args) {
    String str = "'ttached muscles. </P><P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye   _ anatomy 1.jpg\" width=350 bord'";
    str += "'ttached muscles. </P><P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/e  ye_ anatomy 1.jpg\" width=350 bord'";
    StringBuffer sb = new StringBuffer(str);
    Matcher m = Pattern.compile("(?i)(file:///.*?/)(.*?)(\\.\\w+)").matcher(str);
    while(m.find()){
    sb = sb.replace(m.start(2), m.end(2), m.group(2).replaceAll("\\s*", ""));
    }
    System.out.println(sb.toString());
    }
      

  12.   

    没错,主要的是想帮助你找到方法。
    你虽然在测试中没有任何问题,但是我那个正则表达式并不像楼下朋友写的那么严格。
    假设是在一个html页中查找的话,可以会把a标签中的属性也读取出来。
    拿到方法自己会跟着需求变化来实现自己的功能,出现问题自己可以找可以改变现有的代码。
      

  13.   


    你的结果是需要这样么?/*<P align=center>
    <IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/eye_anatomy1.jpg" width=350 border=0></P> fd ssda f 
    fd  <P align=center><IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/eye_anatomy1.bmp" width=350 border=0></P><IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/eye_anatomy1.png" width=350 border=0>
    */
    那么只需要将pattern改成dotall就行,如下Pattern p = Pattern.compile(
            "(.*?)(src=\"file:///android_asset/images/)(.*?\\s+.*?)(\")",
            Pattern.DOTALL);
      

  14.   


    String str = "\r\n<P align=center>\r\n"
            + "<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy 1  .jpg\" width=350 border=0></P> fd ssda f \r\n"
            + "fd  <P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/  eye_anato  my 1 .bmp\" width=350 border=0></P>\r\n"
            + "fd  <P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/  eye_anato  my 1 .bmp\" width=350 border=0></P>\r\n"
            + "fd  <P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/  eye_anato  my 1 .bmp\" width=350 border=0></P>\r\n"
            + "fd  <P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/  eye_anato  my 1 .bmp\" width=350 border=0></P>\r\n"
            + "\r\n<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy1.png\" width=350 border=0>\r\n"
            + "\r\n<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy1.png\" width=350 border=0>\r\n"
            + "\r\n<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy1.png\" width=350 border=0>\r\n"
            + "\r\n<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy1.png\" width=350 border=0>\r\n"
            + "\r\n<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy1.png\" width=350 border=0>\r\n";Pattern p = Pattern.compile(
            "(.*?)(src=\"file:///android_asset/images/)(.*?)(\")",
            Pattern.DOTALL);
    // nanoseconds 2600356Pattern p = Pattern.compile(
            "(.*?)(src=\"file:///android_asset/images/)(.*?\\s+.*?)(\")",
            Pattern.DOTALL);
    // nanoseconds 6596175
    其实也没改啥,尽量降低第一个正则的复杂度而已, 但是这样改以后,凡是src="file:///android_asset/images/..."这种都会对后面的那部分做replaceAll(" ",""),虽然结果不会有变化.