notepad++正则表达式替换字符串
0 概述
本⼈⼯作中很少涉及python、java编程,但因⼯作需要,翻阅了多个csdn博客,学习了正则表达式,但每个博客都有⼀些错误,于是整理了多个博客如下,⽂末给出参考。
1 元字符
元字符是构造正则表达式的⼀种基本元素。
. :匹配除换⾏符以外的任意字符
w:匹配字母或数字或下划线或汉字
s:匹配任意的空⽩符
d:匹配数字
b:匹配单词的开始或结束
^:匹配字符串的开始
$:匹配字符串的结束
匹配有abc开头的字符串:abc或者^abc
匹配8位数字的QQ号码:^dddddddd$
匹配1开头11位数字的⼿机号码:^1dddddddddd$
2 重复限定符
正则没提供办法处理这些重复的元字符吗?答案肯定是有的。
*:重复零次或更多次
+:重复⼀次或更多次
:重复零次或⼀次
{n}:重复n次
{n,}:重复n次或更多次
{n,m}:重复n到m次
有了这些限定符之后,我们就可以对之前的正则表达式进⾏改造了,⽐如:
匹配8位数字的QQ号码:^d{8}$
匹配1开头11位数字的⼿机号码:^1d{10}$
匹配银⾏卡号是14~18位的数字:^d{14,18}$
匹配以a开头的,0个或多个b结尾的字符串^ab*$
3 分组()
限定符是作⽤在与他左边最近的⼀个字符,那么问题来了,如果我想要ab同时被限定那怎么办呢?
正则表达式中⽤⼩括号()来做分组,也就是括号中的内容作为⼀个整体。
因此当我们要匹配多个ab时,我们可以这样。
如匹配字符串中包含0到多个ab开头:^(ab)*
4 转义
正则提供了转义的⽅式,也就是要把这些元字符、限定符或者关键字转义成普通的字符,做法很简答,就是在要转义的字符前⾯加个斜杠,也就是\即可。
匹配字符串中包含0到多个(ab)开头:^(\(ab\))*
正则表达式中,\代表转义字符,还有⼀些特殊字符可以转义,⽐如
\f 换页
\n 换⾏
\r 回车
\s 空⽩字符:空格、制表符、换页符
\S ⾮空⽩字符
\t 制表符
\d ⼀个数字字符0-9
\D ⾮数字字符
\w 匹配字母数字下划线,相当于[A-Za-z0-9_]
\W匹配⾮字母数字下划线。相当于[^A-Za-z0-9_]
\b 匹配单词边界,即单词与空格间的位置
notepad++\B ⾮单词边界匹配
\1 \2指的是反向引⽤
5 条件或 |
回到我们刚才的⼿机号匹配,我们都知道:国内号码都来⾃三⼤⽹,它们都有属于⾃⼰的号段,⽐如联通有
130/131/132/155/156/185/186/145/176等号段,假如让我们匹配⼀个联通的号码,那按照我们⽬前所学到的正则,应该⽆从下⼿的,因为这⾥包含了⼀些并列的条件,也就是“或”,那么在正则中是如何表⽰“或”的呢?
正则⽤符号 | 来表⽰或,也叫做分⽀条件,当满⾜正则⾥的分⽀条件的任何⼀种条件时,都会当成是匹配成功。
那么我们就可以⽤或条件来处理这个问题
^(130|131|132|155|156|185|186|145|176)\d{8}$
6 区间[ ]
看到上⾯的例⼦,是不是看到有什么规律?是不是还有⼀种想要简化的冲动?
实际是有的
正则提供⼀个元字符中括号 [] 来表⽰区间条件。
限定0到9 可以写成[0-9]
限定A-Z 写成[A-Z]
限定某些数字 [165]
那上⾯的正则我们还改成这样:
^((13[0-2])|(15[56])|(18[5-6])|145|176)\d{8}$
7 常⽤表达式举例
. 匹配任意字符.
| 匹配表达式左边和右边的字符. 例如, “ab|bc” 匹配 “ab” 或者 “bc”.
[] 匹配列表之中的任何单个字符. 例如, “[ab]” 匹配 “a” 或者 “b”. “[0-9]” 匹配任意数字.
[^] 匹配列表之外的任何单个字符. 例如, “[^ab]” 匹配 “a” 和 “b” 以外的字符. “[^0-9]” 匹配任意⾮数字字符.
其左边的字符被匹配任意次(0次,或者多次). 例如 “be*” 匹配 “b”, “be” 或者 “bee”.
其左边的字符被匹配⾄少⼀次(1次,或者多次). 例如 “be+” 匹配 “be” 或者 “bee” 但是不匹配 “b”.
其左边的字符被匹配0次或者1次. 例如 “be” 匹配 “b” 或者 “be” 但是不匹配 “bee”.
^ 其右边的表达式被匹配在⼀⾏的开始. 例如 “^A” 仅仅匹配以 “A” 开头的⾏.
$ 其左边的表达式被匹配在⼀⾏的结尾. 例如 “e$” 仅仅匹配以 “e” 结尾的⾏.
() 影响表达式匹配的顺序,并且⽤作表达式的分组标记.
/ 转义字符. 如果你要使⽤ “/” 本⾝, 则应该使⽤ “//”.
8 我的测试
例1:
原始串
str[1]abc[991];
str[2]abc[992];
str[11]abc[993];
str[22]abc[994];
str[111]abc[995];
str[222]abc[996];
str[1111]abc[997];
str[2222]abc[999];
⽬标串:
abc[1];
abc[2];
abc[11];
abc[22];
abc[111];
abc[222];
abc[1111];
abc[2222];
处理:
查串:str[([0-9]+)]abc[[0-9]+]
替换串:abc[\1]
例2:原始串
<⽅案ID>0a0b-3c4d-adgcdhb3-7db8
<⽅案ID>1a0b-3c4d-adgcdhb3-7db8
<⽅案ID>2a0b-3c4d-adgcdhb3-7db8
<⽅案ID>3a0b-3c4d-adgcdhb3-7db8
处理差别:结束符是否为第⼀个字符
9 常⽤正则表达式
⼀、校验数字的表达式
1 数字:^[0-9]*$
2 n位的数字:^\d{n}$
3 ⾄少n位的数字:^\d{n,}$
4 m-n位的数字:^\d{m,n}$
5 零和⾮零开头的数字:^(0|[1-9][0-9]*)$
6 ⾮零开头的最多带两位⼩数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
7 带1-2位⼩数的正数或负数:^(\-)?\d+(\.\d{1,2})?$
8 正数、负数、和⼩数:^(\-|\+)?\d+(\.\d+)?$
9 有两位⼩数的正实数:^[0-9]+(.[0-9]{2})?$
10 有1~3位⼩数的正实数:^[0-9]+(.[0-9]{1,3})?$
11 ⾮零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
12 ⾮零的负整数:^\-[1-9][]0-9*$ 或 ^-[1-9]\d*$
13 ⾮负整数:^\d+$ 或 ^[1-9]\d*|0$
14 ⾮正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
15 ⾮负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
16 ⾮正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
17 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
18 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
19 浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
⼆、校验字符的表达式
1 汉字:^[\u4e00-\u9fa5]{0,}$
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论