网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月26日
漏签
0
天
c#吧
关注:
188,050
贴子:
821,446
看贴
图片
吧主推荐
视频
游戏
9
回复贴,共
1
页
<<返回c#吧
>0< 加载中...
再聊_正则表达式
只看楼主
收藏
回复
vivi1share
c#初学者
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
一楼喂度娘
vivi1share
c#初学者
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
今天我们只聊一个话题: 零宽断言
首先 零宽断言怎么解释拗口的词语呢, 这个词要分开来理解才行
零宽, 就是零的宽度,也就是没有宽度, 匹配一个没有宽度的“字符”,是不是难以想象?
别急,如果有一天,客户需要在所有的'AC'字符中插入一个字符'O'变成'AOC',这时零宽就可以发挥作用啦。 你脑中的方法是:把前面是A而后面是C的 “零宽” 替换为O, 不就完成了吗!
正确!,于是你觉得零宽真有用。
无锡麒林智科技
酷狗输入法正版音乐网站酷狗输入法,为您提供酷音乐播放器酷狗输入法 、提供听书、长音频、频道、听小说和MV播放服务。酷狗下载,就是歌多!小说相声也很多!场景音乐也很多...
2025-01-26 21:28
广告
立即查看
vivi1share
c#初学者
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这时候你灵光一闪
AC 变成 AOC 那我查找 AC 替换成AOC 不就成了吗?
正确, 于是这时候你觉得零宽是多余的, 没有任何作用。
vivi1share
c#初学者
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
客户的需求变了
要把 AACC 换成 AAOCC
要把 BBCC 换成 BBOCC
要把 DDFF 换成 DDOFF
等等,等等
意思凡是遇到 前面两个相同字符,后面两个相同字符,则中间插入一个O
这时候简单的查找替换用不上了, 想想该怎么办呢?
vivi1share
c#初学者
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这时候零宽再度出场
断言也跟着来了
为什么呢,因为他们俩密不可分,
断言是什么意思呢? 其实就是条件
用来断言: 零宽前面是什么什么, 零宽后面是什么什么 定义符合这么个条件的零宽!
vivi1share
c#初学者
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
需求是:前面两个相同字符,后面两个相同字符,则中间插入一个O
利用零宽断言 正则表达式是:将 (?=(\w)\1)(?<=\2(\w)) 替换成 O
一试,成功,于是,你又开始觉得零宽断言挺有用的
解释(?=) 指正向肯定 (?<=) 指反向肯定
这条正则表达式合起来的意思是, 查询条件为:前面两个字符相同,后面两个字符相同的 零宽
vivi1share
c#初学者
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
你很机灵, 你突然又想到了,下面的正则表达式
(\w)\1(\w)\2 也能查找出来前面两个字符相同的后面两个字符相同的匹配
于是你把这个匹配替换成$1$1O$2$2 一样完成了任务
这时候,你开始又觉得零宽断言 似乎没什么作用了。
vivi1share
c#初学者
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
一个客户需求飞来:
把文档中所有的数字,每三个一组,用逗号分隔开来
比如:1234567890 要变成 1,234,567,890
这时候你只有傻眼了。难道要全文搜索数字,然后一个一个改吗?
真可怕!
vivi1share
c#初学者
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
(?<=\d)(?=(\d\d\d)+\D)
这个正则表达式的通俗解释是:
把前面是数字,后面是三个数字的整数倍的 零宽
查找出来
把这些零宽替换为 逗号!
就这么简单, 问题轻松解决了!
vivi1share
c#初学者
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
再来看一个零宽断言: 正向否定零宽断言
查找四位不重复的数字
(?!\d*(\d)\d*\1)\d{4}
匹配四位不重复的数字 7654 6413 2135
不匹配 9898 7798 7987 8292
我们先看 \d*(\d)\d*\1 代表的意思是: 有重复的数字,
一旦被否定了(?! ), 意思就是无重复的数字
这个正则表达式通俗解释是
(后面的数字是没有重复的零宽) 和 (后面的4个数字) 一并匹配出来。
如此而已,您理解了吗?
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示