2 u013047803 u013047803 于 2016.03.26 11:59 提问

一个关于正则表达式的问题

{"resultcode":910005,"resultmsg":[api接口]无法查询到应用记录,"transactionid":""}
如何让上面字符串的 resultmsg值 [api接口]无法查询到应用记录 加上双引号 像这样 图片说明 不知道用正则表达式能不能弄出来? 求解答, 先谢谢了~

2个回答

fateflv
fateflv   2016.03.26 16:03
已采纳

正则表达式:

 (.*?resultmsg\":)(.*?)(,.*?})

正则用小括号分成三组,group(1)则代表匹配出的结果的第一部分的内容。依此类推。

java程序代码:

 /*
* @author   fateflv
* @version  1.0
* @since    2016-03-26
* @site     http://my.csdn.net/fateflv
*/

import java.util.regex.*;

public class reg {
    public static void main(String[]agrs)
    {

        Pattern p=Pattern.compile("(.*?resultmsg\":)(.*?)(,.*?})"); 

        //String s = "{\"resultcode\":910005,\"resultmsg\":[api接口]无法查询到应用记录,\"transactionid\":\"\"}";

        Matcher m=p.matcher("{\"resultcode\":910005,\"resultmsg\":[api接口]无法查询到应用记录,\"transactionid\":\"\"}");

        while(m.find()) { 
            System.out.println("要匹配的原串为:\n"+m.group(0));
            System.out.println(); 
            System.out.println("第1组: "+m.group(1));
            System.out.println("第2组: "+m.group(2));
            System.out.println("第3组: "+m.group(3)); 
            System.out.println("处理后: \n"+m.group(1)+"\""+m.group(2)+"\""+m.group(3)); 
        }
    }
}

示例结果图片:
图片说明

u013047803
u013047803 辛苦你了,感谢! 我用subString和indexOf弄好了, 不过感觉你这个更加高大上些 哈哈! 留着以后学习!
一年多之前 回复
w172087242
w172087242   Ds   Rxr 2016.03.27 16:23

String s1 = "{\"resultcode\":910005,\"resultmsg\":[api接口]无法查询到应用记录,\"transactionid\":\"\"}";
System.out.println(s1.replaceAll("\"resultmsg\":(.+?),\"transactionid\"", "\"resultmsg\":\"$1\",\"transactionid\""));

replaceAll走的是模式,$1表示捕获组一

w172087242
w172087242 回复凡夫俗子_: 根据自己的字符串写出相应的模式就可以,你可以看看关于java中正则表达式的详细内容。
一年多之前 回复
w172087242
w172087242 回复凡夫俗子_: String s1 = "{\"resultcode\":910019,\"resultmsg\":[api接口]通过transactionid无法查询到交易对象或者交易对象已经过期}"; System.out.println(s1.replaceAll("\"resultmsg\":(.+?)\\}", "\"resultmsg\":\"$1\"\\}"));
一年多之前 回复
w172087242
w172087242 String s1 = "{\"resultcode\":910019,\"resultmsg\":[api接口]通过transactionid无法查询到交易对象或者交易对象已经过期}"; System.out.println(s1.replaceAll("\"resultmsg\":(.+?)\\}", "\"resultmsg\":\"$1\"\\}"));
一年多之前 回复
u013047803
u013047803 还有个问题,就是这个字符串 {\"resultcode\":910019,\"resultmsg\":[api接口]通过transactionid无法查询到交易对象或者交易对象已经过期} 我该怎样让resultmsg:后面的值加上双引号
一年多之前 回复
u013047803
u013047803 回复little_how: 嗯,看到了。 谢谢 又学到了一招~ 哈哈
一年多之前 回复
w172087242
w172087242 如果resultmsg可以为空,正则可以改(.+?)为(.*?)
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!