求一字符串替换的正则表达式,字符串类似“香蕉->水果->香蕉”,“桃子->水果->桃子”的字符串
  替换为“香蕉->水果->好吃”,“桃子->水果->好吃”,
就是前后有相同字符的,保留前一个,把后一个都替换成统一的字符串。
谢谢,

解决方案 »

  1.   

    格式固定吗?就是像这样的格式吗?“xx->xx->xx”“香蕉->水果->香蕉”
      

  2.   

    \(.*?)->(.*?)->$1\$1->$2->好吃\
    估计你要把$1换掉,是不是\1的,在java里面的反向引用跟perl不一样
      

  3.   

    以前有个工具,让你写标准正则,然后会帮你转化成各种语言的,PERL啊,ruby啊,java,C#不一而足啊
      

  4.   


    public static void main(String[] args) {
    String str="香蕉->水果->香蕉,桃子->水果->桃子";
    System.out.println(str.replaceAll("(.+?)->(.+?)->\\1","$1->$2->好吃"));
    }
      

  5.   

    求一字符串替换的正则表达式, 字符串类似“香蕉->水果->香蕉”,“桃子->水果->桃子”的字符串 
      替换为“香蕉->水果->好吃”,“桃子->水果->好吃”, 
    就是前后有相同字符的,保留前一个,把后一个都替换成统一的字符串。 
    谢谢,
    再详加说明下,字符串是固定的,就是“桃子->水果->桃子”格式的,替换时要求两头的字符串一样,而且中间的字符是水果。
    如果没有规则正则,只能写代码判断了。
      

  6.   

    (.*)->(.*)->(.*)判断$1=$3。如果相等再把$3替换成'好吃'我记得java里面有这样的替换函数replaceAll。
      

  7.   

    import java.io.*;
    class ReadFileTest 
    {
        public static void main(String[] args) 
        {
            BufferedReader br = null;
            File f = new File(".\\test.txt");
            try
            {
                br = new BufferedReader(new FileReader(f));
                String temp = "";
                String type = "";
                while ((temp = br.readLine())!=null)
                {
                    if (temp.matches("^[\\d\\D]*#@$"))
                    {
                        type = temp.replaceAll("^([\\d\\D]*)#@$","题型:$1");
                        continue;
                    }
                    temp = temp.replaceAll("#","").replaceAll("^(\\d+)",type+"\n题目:$1");
                    System.out.println(temp);
                }
            }
            catch (Exception e)
            {
                System.out.println("error");
            }
        }
    }这个是一个正则替换的java代码。希望可以参考下。$1指正则表达式里面第一个小括号里面的内容()依此类推
      

  8.   

    string.replaceAll("(.+?)->(.+?)->\\1","$1->$2->好吃")‘.*?’就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。
    例如:
    a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。‘\1’是后向引用用于重复搜索前面某个分组匹配的文本,代表分组1匹配的文本。请看示例:
    \b(\w+)\b\s+\1\b可以用来匹配重复的单词,像go go, 或者kitty kitty。
    这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),
    这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+),最后是分组1中捕获的内容(也就是前面匹配的那个单词)(\1)。$1,$2分别代表前面正则中用()括起来的第一个和第二个位置
      

  9.   

    不好意思少了点
     public static void main(String[] args) 
        { 
          String temp="香蕉->水果->香蕉www,桃子->水果->桃子";
          System.out.println(temp.replaceAll("(.+?)->(.+?)->\\1","$1->$2->好吃"));
         
        } 
    result:香蕉->水果->好吃www,桃子->水果->好吃
     public static void main(String[] args) 
        { 
          String temp="香蕉->水果->香蕉www,桃子->水果->桃子";
          System.out.println(temp.replaceAll("(.+?)->(.+?)->\\1$","$1->$2->好吃"));
         
        } 
    result:香蕉->水果->香蕉www,桃子->水果->好吃
      

  10.   


    public class TestSplit { public static void main(String args[]) {
    String str = "香蕉->水果->香蕉"; System.out.println(getSplit(str)); } public static String getSplit(String str) { String end_str = "";
    String[] _str = str.split("->");
    if (_str[0].equals(_str[_str.length - 1])) {
    _str[_str.length - 1] = "好吃";
    } for (int i = 0; i < _str.length; i++) {
    if (i == _str.length - 1)
    end_str += _str[i];
    else
    end_str += _str[i] + "->";
    }
    return end_str;
    }
    }