最近处理传感器数据,需要用到正则表达式,之前学过的已经忘光光. 重新学习一遍,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, 欢迎路过的同志们指出问题.^_^