A. 求验证json格式的正则表达式
你的json的具体格式,用什么字符分隔等尽量说清楚。给的条件越多写出的正则针对性就越强。
补充:
"^\[(\{name:"(.{0,8})",age:([0-9]|[1-9][0-9]),sex:"([男女])",Remark:"(.{0,30})"\},)*(\{name:"(.{0,8})",age:([0-9]|[1-9][0-9]),sex:"([男女])",Remark:"(.{0,30})"\})\]$"(不含引号)
对name和Remark的长度做了限制,最短为0个字符,最长可以到30个(name的最大长也可以改到30),原因是直接用.*?匹配时可能出现跨过一个{}的匹配情况。本人能力有限,您将就着用。
对age限定为0~99,十位数不为零,sex仅限男女,如有特殊需求请自行添加。
另外,在java等程序中使用时注意要对“\”转义。
B. 如何用正则表达式提取url返回的jason数值
正则表达式:(?<="access_token":)"(.+?)"
取第一捕获组的数据,就行了.
完整的Java程序如下:
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
publicclassFFF{
publicstaticvoidmain(String[]args){
Strings="{"access_token":"","token_type":"client_credentials","expires_in":3600,"example_parameter":null}";
Stringregex="(?<="access_token":)"(.+?)"";
Patternp=Pattern.compile(regex);
Matcherm=p.matcher(s);
while(m.find()){
System.out.println(m.group(1));
}
}
}
运行结果:
其实用json对象解析更简单,完整的Java程序如下:
importorg.json.JSONObject;
publicclassFFF{
publicstaticvoidmain(String[]args){
Strings="{"access_token":"","token_type":"client_credentials","expires_in":3600,"example_parameter":null}";
JSONObjectjsonObj=newJSONObject(s);
Stringstr=(String)jsonObj.get("access_token");
System.out.println(str);
}
}
运行结果:
C. 正则表达式、xpath、BeautifulSoup和JSONPath的区别
1.正则表达式是进行内容匹配,将符合要求的内容全部获取;xpath()能将字符串转化为标签,它会检测字符串内容是否为标签,但是不能检
测出内容是否为真的标签;Beautifulsoup是Python的一个第三方库,它的作用和 xpath 作用一样,都是用来解析html数据的相比之下,
xpath的速度会快一点,因为xpath底层是用c来实现的
2.三者语法不同,正则表达式使用元字符,将所有获得内容与匹配条件进行匹配,而xpath和bs4将获取的解析后的源码进行按条件筛选,筛选
出想要的标签即根据标签属性来找到指定的标签,之后对标签进行对应内容获取。
D. java中正则表达式如何使用比如判断一个字符串是否满足某种格式,给个详细点的例子
按照你的要求给出的Java正则表达式的例子如下
//下面这个正则表达式匹配不能以.css,.html,.js,.json或者.xml结尾的字符串
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
publicclassCC{
publicstaticvoidmain(String[]args){
Strings="xxxx.js.jss";//目标字符串
Stringregex="((?!\.((css)|(html)|(js)|(json)|(xml))$).)+";//正则表达式
Patternp=Pattern.compile(regex);
Matcherm=p.matcher(s);
if(m.matches()){
System.out.println("匹配");
}else{
System.out.println("不匹配");
}
}
}
运行结果
匹配
E. java用正则表达式截取json多余的字符串
这样的话,只需要截取需要的字符串即可。
举例:
publicstaticvoidmain(String[]args){
Stringparse="[{CSTM_NO:"11118",CSTM_NAME:"广东XX电力有限公司",FIX_GNL:"111810158",FIX_ACC:"D201306070003",OP_FLAG:"正常",BUSS_KIND_NAME:"三个月定期存款",BAL:"25,178,750.00",AVAL_BAL:"25,178,750.00",OP_DATE:"2013-06-07",DUE_DATE:"2013-12-07",ROWNUM_:1,idx:0},{CSTM_NO:"11118",CSTM_NAME:"广东XX电力有限公司",FIX_GNL:"111810158",FIX_ACC:"D201306070002",OP_FLAG:"正常",BUSS_KIND_NAME:"三个月定期存款",BAL:"25,178,750.00",AVAL_BAL:"25,178,750.00",OP_DATE:"2013-06-07",DUE_DATE:"2013-12-07",ROWNUM_:3,idx:2},{CSTM_NO:"11118",CSTM_NAME:"广东XX电力有限公司",FIX_GNL:"111810158",FIX_ACC:"D201306070005",OP_FLAG:"正常",BUSS_KIND_NAME:"三个月定期存款",BAL:"25,178,750.00",AVAL_BAL:"25,178,750.00",OP_DATE:"2013-06-07",DUE_DATE:"2013-12-07",ROWNUM_:4,idx:3}]";
Stringregex="FIX_ACC:(.*?),OP_FLAG";//别忘了使用非贪婪模式!
Matchermatcher=Pattern.compile(regex).matcher(parse);
while(matcher.find())
{
Stringret=matcher.group(1);
System.out.println(ret);
}
}
F. Java正则 提取指定字符串中的文字
用JSON来做,把上面的先转化为JSON,然后获取到URL的值在截取。
比如:String s = " "action": {
"action": "loadpage",
"list_name": "sale",
"pagetype": "childcate",
"showsift": true,
"title": "二手物品",
"showpub": true,
"url": "$rescachehelper.getResource(25)&topcate=sale"
}";
把里面的双引号先转为单引号
JSONObject json = JSONObject.fromObject(s);
String value = json.get("action");
Stirng url = value.get("url");
然后对url的值进行截取:
String no = url.substring(url.indexOf("("),url.indexOf(")"));
....这里为你处理的方法,最后得到一个新的url为newUrl
然后设置到json里面去
value.put("url",newUrl);
最后在把json变为字符串的话:
json.toString();
G. json正则式替换 用java替换
import java.util.regex.Pattern
String jsonText="<你的Json的text>";
//以【"result": 1】分割json文本
Pattern p=Pattern.compile(",\s*\"result\": 1");
String[] mags=p.split(jsonText);
if (mags.length>1)
{
//保留最后出现的"result": 1
mags[mags.length-1]=",\n\"result\": 1"+mags[mags.length-1];
}
//重新组合
StringBuffer s=new StringBuffer();
for (i=0;i<mags.length;i++)
{
s.append(mags[i]);
}
String result=s.toString(); //结果
H. Java中如何使用正则匹配一对中括号中的引号冒号(":),目的是在冒号后加个空格
我觉得楼上那位说把中括号里的取出来处理了再弄回去可行啊,把原字符串一分为三,把中间处理了再组合起来,但是我写的这个很low只能处理一次中括号:
I. java 正则匹配
packageTest2;
importjava.io.FileOutputStream;
importjava.util.Iterator;
importjava.util.LinkedHashMap;
importjava.util.Map;
importorg.apache.poi.hssf.usermodel.HSSFCell;
importorg.apache.poi.hssf.usermodel.HSSFRow;
importorg.apache.poi.hssf.usermodel.HSSFSheet;
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
importnet.sf.json.JSONArray;
importnet.sf.json.JSONObject;
publicclassJSONProcess{
publicJSONArraygetJsonObject(Stringstr){
JSONArrayjo=JSONArray.fromObject(str);
returnjo;
}
publicvoidwriteExcel(JSONArrayja)throwsException{
Mapmap=newLinkedHashMap();
map.put("id","id");
map.put("tag1","tag1");
map.put("tag2","tag2");
map.put("tag3","tag3");
map.put("tag4","tag4");
map.put("tag5","tag5");
map.put("tag6","tag6");
map.put("tag7","tag7");
map.put("tag8","tag8");
HSSFWorkbookworkbook=newHSSFWorkbook();
//生成一个表格并设置表格默认列宽度为25个字节
HSSFSheetsheet=workbook.createSheet("sheet1");
sheet.setDefaultColumnWidth((short)25);
//生成表格标题
HSSFRowtitleRow=sheet.createRow(0);
intcolumnLength1=20;
HSSFCell[]title=newHSSFCell[columnLength1];
for(inti=0;i<columnLength1;i++){
title[i]=titleRow.createCell((short)i);
title[i].setEncoding(HSSFCell.ENCODING_UTF_16);
title[i].setCellValue("");
}
//生成表格表头行
HSSFRowheaderRow1=sheet.createRow(0);
HSSFCell[]header1=newHSSFCell[columnLength1];
Iteratorit=map.keySet().iterator();
intcount=0;
while(it.hasNext()){
header1[count]=headerRow1.createCell((short)count);
header1[count].setEncoding(HSSFCell.ENCODING_UTF_16);
header1[count].setCellValue(map.get(it.next()).toString());
count++;
}
//遍历集合数据,产生数据行
FileOutputStreamout=newFileOutputStream("E:/excelTest.xls");
intcellNum=0;
if(ja!=null){
for(intrownum=0;rownum<ja.size();rownum++){
HSSFRowrow=sheet.createRow(rownum+1);
JSONObjectjson=(JSONObject)ja.getJSONObject(rownum);
HSSFCell[]cell=newHSSFCell[columnLength1];
intcounter=1;
cell[0]=row.createCell((short)0);
cell[0].setEncoding(HSSFCell.ENCODING_UTF_16);
cell[0].setCellValue(json.get("id").toString());
JSONArrayja1=(JSONArray)json.getJSONArray("tags");
for(intj=0;j<ja1.size();j++){
JSONObjectjson1=(JSONObject)ja1.get(j);
Iteratorit1=json1.entrySet().iterator();
Stringkey=it1.next().toString();
cell[counter]=row.createCell((short)counter);
cell[counter].setEncoding(HSSFCell.ENCODING_UTF_16);
cell[counter].setCellValue(key.split("=")[1]);
counter++;
}
}
}
workbook.write(out);
out.close();
}
publicstaticvoidmain(String[]args){
JSONProcessjsonProcess=newJSONProcess();
Stringstr="[{"id":1237869662,"tags":[{"201201310009409169":"沙海","weight":"123"},{"211007220000015286":"惊叹号","weight":"117"},{"201110220006272797":"漫工厂","weight":"5"},{"201102070003148762":"超好看","weight":"28"},{"520":"出版人","weight":"858"},{"2328":"作家","weight":"5632"},{"4029":"盗墓笔记","weight":"57495"},{"16115":"南派三叔","weight":"754"}]},{"id":2899165812,"tags":[{"34735":"学生一族","weight":"124648"},{"12544":"热爱生活","weight":"130120"},{"285":"音乐","weight":"5374344"},{"983":"水瓶","weight":"69854"},{"464":"美食","weight":"19040573"}]}]";
JSONArrayja=jsonProcess.getJsonObject(str);
try{
jsonProcess.writeExcel(ja);
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
那是要我写了,我是有多闲啊。
其实这是json结构的字符串啊。在java里面很好处理啊,有现成的类处理这种字符串的。
放到txt或者excel也不难啊。但是代码量挺多的。
你需要的jar包。
commons-beanutils.jar
commons-collections.jar
commons-httpclient.jar
commons-lang.jar
commons-logging.jar
ezmorph-1.0.3.jar
json-lib-2.3-jdk15.jar
poi-2.5.1.jar
因为网络只能上传一个附件,其他jar包你自己弄吧。在网络搜索就行。
J. java正则转义json中双引号
你的JSON本来就有问题吧,怎么可能引号里面还有引号?如果JSON是JS中的,那么双绰号里面可以有单引号,单引号里面也可以有双引号。就像{"地址":"北京市海淀区'中关村南大街'8号"}.
如果JSON在JAVA中,那就用\转义一下。{"地址":"北京市海淀区\"(双引号)中关村南大街\"(双引号)8号"}
或者里面的双引号改成单引号也行{"地址":"北京市海淀区'(单引号)中关村南大街'(单引号)8号"}