如何用正则表达式匹配字符串中间部分并完成指定替换?
正则替换解决方案:保留首尾单词,替换中间内容
直接用下面的正则表达式就能解决你的问题:
匹配正则:^(\S+)\s.*\s(\S+)$
替换模板:$1 router1 $2
为什么之前的写法不行?
你之前只单独匹配了首尾单词,但没把中间内容纳入匹配范围,替换时中间内容会原封不动保留。正确思路是把整个字符串拆成首单词、中间所有内容、尾单词三部分,通过正则一次性匹配这三部分,再用替换模板替换掉中间部分。
正则各部分解释
^(\S+):匹配字符串开头的第一个非空白单词(比如tunnel4、gig1/0/1),存入分组1(对应替换模板里的$1)\s.*\s:匹配第一个空格到最后一个空格之间的所有内容(不管中间有多少单词或字符),这部分就是要替换掉的内容(\S+)$:匹配字符串结尾的最后一个非空白单词(比如status、bandwidth),存入分组2(对应$2)
示例验证
拿你的测试数据举例:
- 原字符串:
tunnel4 connection to router 1 status - 正则匹配后,分组1是
tunnel4,分组2是status,中间的connection to router 1被替换成router1,最终输出:tunnel4 router1 status
如果需要兼容只有两个单词的字符串(比如hello world),可以把正则调整为:^(\S+)\s*(.*?)\s*(\S+)$
替换模板用$1 router1 $3,替换后会得到hello router1 world。
内容的提问来源于stack exchange,提问作者Daniel Flick
相关产品推荐
相关产品推荐

