正则表达式的一般技巧
正则表达式如何部分替换匹配到的字符串
查找文本并替换其中一部分内容,另一部分保持不变
例子:
有如下文本,我想把“第xx章”改成“第xx节”,要求中间的数字不被替换。(因为文章中该章节特别多,手动替换不现实,也不能单个字替换,会影响其他的词语意思。)
第01章
...章法,...公章,...
第12章
...章程,...印章,...
第23章
...印章,...章法,...
第34章
...章法,...章程,...
第55章
...公章,...章法,...
我查找输入“第([0-9])([0-9])章
”,替换输入“第$1$2节
”即可
讲解:
[0-9]
:匹配一个数字,这个数字范围是0~9
( )
标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )
一般将不需要替换的那部分用捕获(小括号括起来)
第$1$2节
,第一组数值,保持不变1,第二组数值,保持不变2,S1代表括号1中的内容,S2代表括号2中的内容。
$number 把匹配的第number组替换成替换表达式
替换手机号码中间部分“#”
一个手机号13688886666
,由于安全性,需要替换第4-7位字符串为星号,为136****6666
。
找到字符串的正则表达式:(\d{3})\d{4}(\d{4})
替换使用的正则表达式:$1****$2
原理解析:
正则表达式中,替换字符串,括号的意思是分组,在替换中,可以使用$n(n为数字)来依次引用模式串中用括号定义的字串。
"(\d{3})\d{4}(\d{4})"
的意思就是 ,用括号分为三段,(前3个数字,中间4个数字,最后4个数字)
"$1****$2"
的意思就是,替换为,(第一组数值,保持不变1;中间为∗;第二组数值,保持不变1;中间为∗;第二组数值,保持不变2)
一般将不需要替换的那部分用捕获(小括号括起来),替换时用$1加上新字符替换搜到的字符串。
参考:
1.正则表达式如何部分替换匹配到的字符串 | 马上学123
2.正则表达式在线测试 | 菜鸟工具 (可以在这测试)