您的位置:首页 > 其它

正则表达式学习

2017-06-13 16:03 120 查看
最近处理传感器数据,需要用到正则表达式,之前学过的已经忘光光. 重新学习一遍,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)

4000
(? =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, 欢迎路过的同志们指出问题.^_^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: