正则表达式——文本定位:
一、应当具备的两种思维
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)