正则表达式学习

最近处理传感器数据,需要用到正则表达式,之前学过的已经忘光光. 重新学习一遍,mark一下,以防又忘光光.

介绍几个会用到的正则表达式:
a. (?<=pattern)
JDK API 1.6 解释为 : pattern(正则表达式),通过零宽度的正 lookbehind .
个人理解: 需要识别的数据之前数据符合正则表达式pattern.
正则表达式为 : (?<=31)\d{2}\b
(?<=31) : 需识别数据前面为31
\d{2} : 需识别数据为两个数字 (\d为数字,{2}为数字出现次数)
\b : 需识别数据后面为单词边界
贴上测试代码.

输出结果如下:
原始数据    : 3315 13121 1759 2516 3178213  3153
匹配后数据 : 21  53  
正则表达式 : (?<=31)\d{2}\b
public class RegexDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String src = "3315 13121 1759 2516 3178213  3153";
        String dst = "";
        //需增加转义字符\
        String regex = "(?<=31)\\d{2}\\b";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(src);
        while (matcher.find()){
            dst += matcher.group();
            dst += "  ";
        }
        System.out.println("原始数据    : " + src);
        System.out.println("匹配后数据 : " + dst);
        System.out.println("正则表达式 : " + regex);
    }
}

b. (?< !pattern)
JDK API 1.6 解释为 : pattern(正则表达式),通过零宽度的负 lookbehind .
个人理解: 需要识别的数据之前数据不符合正则表达式pattern.
正则表达式为 : (?< !31)\d{2}\b
(?< !31) : 需识别数据前面不为31
\d{2} : 需识别数据为两个数字 (\d为数字,{2}为数字出现次数)
\b : 需识别数据后面为单词边界
与上面代码区别只在于String regex = “(?< !31)\d{2}\b”;

    输出结果如下:
    原始数据   : 3315 13121 1759 2516 3178213  3153
    匹配后数据 : 15  59  16  13  
    正则表达式 : (?<!31)\d{2}\b

c. (?=pattern)
JDK API 1.6 解释为 : pattern(正则表达式),通过零宽度的正 lookahead.
个人理解: 需要识别的数据之后数据符合正则表达式pattern.
正则表达式为 : \d{2}(?=15)
(? =15) : 需识别数据后面为15
\d{2} : 需识别数据为两个数字 (\d为数字,{2}为数字出现次数)
与上面代码区别只在于String regex = “\d{2}(?=15)”;

原始数据    : 3315 13121 1759 2516 3178213  3153
匹配后数据 : 33  
正则表达式 : \d{2}(?=15)

d. (?!pattern)
JDK API 1.6 解释为 : pattern(正则表达式),通过零宽度的负 lookahead.
个人理解: 需要识别的数据之后数据不符合正则表达式pattern.
正则表达式为 : \d{2}(?!15)
(? =15) : 需识别数据后面不为15
\d{2} : 需识别数据为两个数字 (\d为数字,{2}为数字出现次数)
与上面代码区别只在于String regex = “\d{2}(?!15)”;

原始数据    : 3315 13121 1759 2516 3178213  3153
匹配后数据 : 31  13  12  17  59  25  16  31  78  21  31  53   
正则表达式 : \d{2}(?!15)

贴一组待处理传感器数据,需匹配出缺少 (‘]’) 数据, 补齐(‘]’), 以及一行有多组数据时,插入换行符使得每行只有一组数据.

[20,-344,-28]
[36,-360,-24]
[64,-228,28]
[28,-164,36]
[32,-176,20]
[76,-220,-8]
[60,-240,8[68,-228,32] — 缺少]
[68,-228,32]
[128,-252,-4]
[104,-340,-24]
[72,-236,-8] [108,-376,-24] – 一行多组数据
[76,-284,-28]
[-12,-364,-76]
[32,-260,-32]

1.找出缺少’]’的数据
统计数据过程中发现,缺少’]’的数据,都是 “数字[“ 的形式.
正则表达式为 (?<=\d)[
使用格式: String.replaceAll(“(?<=\d)\ [” , “\]\[“);

2.获取[] 内数据
正则表达式为 (?<=[)(\S+)(?=]);
regex = “(?<=\[)(\S+)(?=\ ])”;

第一次写blog, 欢迎路过的同志们指出问题.^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值