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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
在java中使用正则表达式,截取重复出现的XML字符串
public static void main(String[] args) throws DocumentException { String s = ""; String regEx = ""; Pattern pat = Pattern.compile(regEx); Matcher mat = pat.matcher(s); while(mat.f
Android格式化手机号码为xxx xxxx xxxx
Android格式化手机号码为xxx xxxx xxxx,从中间增删几位依然可以保持格式化的状态,光标的位置也是正常的。
jquery手机号码自动分隔
将手机号格式化为xxx xxxx xxxx的形式
Java 使用正则表达式提取字符串制定的字符
需求://从字符串中提取指定的字符串,提取字符串的手机号; String s="ssfsfhshfsfjjs13293016789yfdiyifdsafyasif"; 示例代码: package com.正则表达式; import java.util.regex.Matcher; import java.util.regex.Pattern; public clas
Java中正则表达式,截取字符串
对XML字符串的截取子串操作 package com.cpic.auap.common.util; import java.util.regex.Matcher; import java.util.regex.Pattern; public class XmlUtils {     /** request标签*/     private static final
android中EditText手机号码xxx xxxx xxxx分段显示
android中EditText手机号码显示的格式为xxx xxxx xxxx,查了很多资料,有的虽然格式显示对了,但是在删除部分手机号之后继续输入 手机号的格式显示的就不是要求的酱紫了,用了好长时间整理了一份代码。ps:如果需要转换成xxx-xxxx-xxxx或者xxx-xxx-xxxxx甚至 其他格式的,可以进行根据需求进行修改。 mEditTextPhoneNumber.add
Java利用正则表达式截取指定字符串之间的内容
Java利用正则表达式截取指定字符串之间的内容: package com.accord.util; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 正则表达式匹配两个字符串之间的内容 * @a
java获取string,获取开头为XXX、结尾为YYY的字符串?
没有直接的方法,但是有间接的方法: 先用substring获取XXX开头的index序号,然后再获取YYY结尾的index序号,然后使用replace替换即可。
java使用正则表达式的方法从json格式的字符串中提取需要的字符串
现有json格式的字符串: [{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\",O
Java正则表达式截取xml中某标签中的内容
                /**   * 获取指定标签中的内容   * @param xml 传入的xml字符串   * @param label  指定的标签中的内容   */ public  static String regex(String xml,String label) { String context = &quot;&quot;; //正则表达式 String rgex = &quot;&amp;...