正则表达式——文本定位

3/8/2017来源:ASP.NET技巧人气:3214

正则表达式——文本定位:

一、应当具备的两种思维

1、用字符的角度看文本 2、区分元字符和特殊符号

*这里说的文本定位并非是定位某些字符,而是定位某些分界

环视(lookaround)——不匹配字符串,仅仅匹配文本中特定位置 - 顺序环视: 肯定型顺序环视:如(?=\d),当前位置右侧是数字则匹配成功 否定型顺序环视:如(?!\d),当前位置右侧不是数字则匹配成功 - 拟序环视: 肯定型顺序环视:如(?<=\d),当前位置左侧是数字则匹配成功 否定型顺序环视:如(?

二、任务例子

有三个字符串,对其中数字字符串按从右向左每隔三位进行定位

字符串1:I borned in 1980 and I have 1235436405754 dollars 字符串2:I borned in 1980s and I have 1235436405754 dollars 字符串3:I borned in 1980 and I have 1235436405754

正则一:(?<=\d)(?=(\d\d\d)+$) 字符串1定位结果:无法匹配 字符串2定位结果:无法匹配 字符串3定位结果:I borned in 1980 and I have 1,235,436,405,754

【分析】 1、(?<=\d)分界左边应该有数字 2、?=(\d\d\d)分界右边应该有三位数字 3、’+$’ 匹配多个(\d\d\d),$确保后边不存在其他字符 4、字符串中,如果数字字符右侧有非数字字符不可以匹配

正则2:(?<=\d)(?=(\d\d\d)+\b) 字符串1定位结果:I borned in 1,980 and I have 1,235,436,405,754 dollars 字符串2定位结果:I borned in 1980s and I have 1,235,436,405,754 dollars 字符串3定位结果:I borned in 1,980 and I have 1,235,436,405,754

【分析】 1、\b匹配单词的开始或结束,通常英文的单词是由空格或标点符号或换行为分隔的,但是\b并不代表这些单词分隔符中的任何一个,只代表一个位置。

正则3:(?<=\d)(?=(\d\d\d)+\s) 字符串1定位结果:I borned in 1,980 and I have 1,235,436,405,754 dollars 字符串2定位结果:I borned in 1980s and I have 1,235,436,405,754 dollars 字符串3定位结果:无法匹配(后边没有空格,无法对应\s)