现在我在用java处理报文,对于报文字段的检测,我感觉很棘手,因为存在这样的情况:
相对位移 长度 属性 名称 值域 填写标志 说明
0 10 A 市场编号 O 不足长度后补空格, 下同
其中属性A为表示字母或者数字:public static final String ACharSet = "[a-zA-Z0-9]";可是加入了空格我到底该怎么办啊,因为我不知道加了多少个空格,真是棘手
另外希望可以写出这个正则表达式的人,也写出想应的正则表达式
将原字符串按照标准的格式显示出来!

解决方案 »

  1.   

    先把这个字符串去空格啊 用 trim()然后在用正则去匹配
      

  2.   

    用substring 每10个字符提取一次,
    对提取出来的10个字符,trim(),再用正则的分组提取每一项的数据。
      

  3.   

    看不太懂题目什么意思,空格正则中可以用“[ ]”,或是空白符“\s”,包括空格,制表符、换行符等。Pattern.compile("\\w+\\s+").matcher(输入);
      

  4.   

    既然处理的是报文,那么报文的结构就是固定不变的,几个字符代表什么属性都固定,
    可能把报文字符串分解之后,再trim进行空格处理,再用正则表达式进行判断即可。
      

  5.   

    4楼的Pattern.compile("\\w+\\s+").matcher(输入);
    如果对方传过来的报文时这样的   "1(空格) 2345(空格)  "
    报文的长度是固定的,如果出现这样的情况这个就难判断啦! 3楼的 那样截取字符串太麻烦啦, 我想用一个正则表达对所有报文的字段进行一次性验证
    一个个弄真麻烦,效率极其低下,
    我现在采取的是动态生成正则表达式    每次生产不一样的表达 需要编译
    这么多的的报文并发处理的时候 
    何来的效率  
      

  6.   

    java的正则实现问题,Perl和Ruby的实现都还是比较很快捷的(\w+|(?:\s+))+要不要试试?
      

  7.   

    LZ你看看是不是这样的:
    import java.util.regex.*;public class MyRegex
    {
    public static final String ACharSet = "[a-zA-Z0-9]"; public static void main(String[] args)
    {
    // 这里有多个空格
    String s = "0   10   A 市场编号 O 不足长度后补空格, 下同";
    // 把2个以上的空格转化成1个空格
    s = s.replaceAll(" {2,}", " ");
    // 获取属性值,先用空格隔开放进数组里面取出第三个元素值
    String sProperty = s.split(" ")[2];
    Matcher m = Pattern.compile(ACharSet).matcher(sProperty);
    if (m.find())
    {
    System.out.println("YES");
    } else
    {
    System.out.println("NO");
    }
    }
    }