2 glory nol Glory_Nol 于 2014.01.04 14:57 提问

java正则表达式截取 [xxxx]xxx 格式的字符串

String str="[日期]aasd阿萨德a12[B超主导卵泡]142[内膜]事实上[雌激素]ewr[孕激素][其它用药][LH(miu/ml)]>200[E2(pg/ml)]";
Pattern mpattern = Pattern.compile("\[([\u4e00-\u9fa5]*\S*?)\]([\u4e00-\u9fa5]|.)*?");
Matcher m = mpattern.matcher(str);
while(m.find()){

System.out.println(m.group(0)+":"+m.group(1)+":"+m.group(2));
}
输出:

[日期]:日期:null [B超主导卵泡]:B超主导卵泡:null [内膜]:内膜:null [雌激素]:雌激素:null [孕激素]:孕激素:null [其它用药]:其它用药:null [LH(miu/ml)]:LH(miu/ml):null [E2(pg/ml)]:E2(pg/ml):null


我想得到 [xxxx]xxx 格式,请问正则表达式也该怎么写?
即:m.group(0)---->[xxxxx]xxx (如:[日期]aasd阿萨德a12)
m.group(1)---->xxxxx (如:日期)
m.group(2)---->xxxxx (如:aasd阿萨德a12)
要支持特殊字符,中文。截取[xxxxx]我已经写出:
“\[([\u4e00-\u9fa5]*\S*?)\]”

   求高手解答,谢谢!

2个回答

u010450893
u010450893   2014.01.08 16:51

没怎么懂你意思,不过如果你是要把你上面的str分解出来的话,你可以遇到[这个就分割,把分割的结果存放一个数组.你再遍历数组.应该就可以了.

Glory_Nol
Glory_Nol   2014.01.24 17:58

/**
* 截取[xxxx]xxxx格式的字符串 当末尾有一个空的[],空格或其他时时
* @param str
* @return
/
public static Map xmlStrToMap3(String str)
{
if (str==null || str.equals("")) {
return null;
}
Map map=new HashMap();
String m="(\[(\S
?)\])(\S*?)(?=\[)";
String m1="(\[(\S*?)\])(\S*?)(?=\[|\s)";
try{
Pattern mpattern = Pattern.compile(m1);
Matcher mmatcher = mpattern.matcher(str);
while(mmatcher.find()){
map.put(mmatcher.group(2),mmatcher.group(3));
System.out.println(mmatcher.group(0)+":"+mmatcher.group(1)+":"+mmatcher.group(2)+":"+mmatcher.group(3));
}
}catch (Exception e) {
return null;
}
return map;
}
/**
* 截取[xxxx]xxxx格式的字符串 末尾什么都没有时,我也不知道是否有正则表达式来截取
* @param str
* @return
*/
public static Map xmlStrToMap2(String str)
{
if (str==null || str.equals("")) {
return null;
}
Map map=new HashMap();
String[] arr1=str.split("\[");
try{
for (int i = 0; i < arr1.length; i++) {
if (arr1[i]!=null && !arr1[i].equals("")) {
String[] arr2=arr1[i].split("\]");
if (arr2.length>0) {
if (arr2[0]!=null && !arr2[0].equals("")) {
map.put(arr2[0], arr2.length>1?arr2[1]:"");
System.out.println(arr2[0]+":"+(arr2.length>1?arr2[1]:""));
}
}

            }
        }
    }catch (Exception e) {
        e.printStackTrace();
        return null;
    }
    return map;
}
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!