鱼C论坛

 找回密码
 立即注册
查看: 2040|回复: 15

那个我有个疑问 关于正则表达式的

[复制链接]
发表于 2020-7-12 17:44:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
(?=999(?!zw))     这个执行顺序会是如何执行的?     
用 999zzw 和 999zw  这两个字符串   

我理解是 ?<!999  由于这个是逆向的 他会向左看  直到最后面999 的9右边有个位置判断了左面是 999  不能匹配 正常应该是没逗号  
但是神奇是 999zw  这个字符串  我按照我上面的想法理论是 999zw  应该是 ,9,9,9z,w,吧?  但是却是 ,9,9,9,z,w,  求大佬解答一下。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-12 18:25:09 | 显示全部楼层
能把完整代码发上来吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-12 18:29:30 | 显示全部楼层
本帖最后由 shabum 于 2020-7-12 18:31 编辑
Stubborn 发表于 2020-7-12 18:25
能把完整代码发上来吗?


已经发了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-12 18:30:39 | 显示全部楼层
print(re.sub(r"(?<!999(?!zw))",",","999zw"))     返回 ,9,9,9,z,w,  
print(re.sub(r"(?<!999(?!zw))",",","999zzw"))  返回是 ,9,9,9z,z,w,

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-12 19:03:03 | 显示全部楼层
Stubborn 发表于 2020-7-12 18:25
能把完整代码发上来吗?

print(re.sub(r"(?<!999(?!zw))",",","999zw"))     返回 ,9,9,9,z,w,  
print(re.sub(r"(?<!999(?!zw))",",","999zzw"))  返回是 ,9,9,9z,z,w,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-12 19:06:40 | 显示全部楼层

?<!999, 如果一个字符串之前不是"999"才做匹配

你想配啥,怎么配?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-12 19:10:04 | 显示全部楼层

我想知道这个匹配过程  我想不通  re.sub(r"(?<!999(?!zw))",",","999zw"   这个加逗号为什么 在999最右面的 9和z中间那个位置      
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-12 19:19:38 | 显示全部楼层

我理解是  (?<!999 会首先判断 999zw 字符串
(位置1)  9   (位置2)   9  (位置3) 9 (位置4)z (位置5)w
?<!999   首先从位置1 左看 然后判断没999字符串 所以替换成逗号  如此类推 到位置 4的时候由于左边是999 所以执行下一个 也就是  ?!zw   他在位置4 向右看  理论应该看到zw  也就是   ?<!999  和  ?!zw 都不符合替换成逗号条件  但是为什么结果是    ,9,9,9,z,w,   也就是替换逗号呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-12 20:31:43 | 显示全部楼层

请问知道吗  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-12 21:15:53 | 显示全部楼层
本帖最后由 Stubborn 于 2020-7-12 21:23 编辑


我翻遍了论坛,你先和我说说,这个正则是什么意思呀?


(?<!FishC)\.com 只匹配前边不是 "FishC" 的字符串 ".com"


FishC(?!\.com) 只匹配后边不是 ".com" 的字符串 "FishC"

(?<!999(?!zw))    只匹配前面不是999后面不是zw的字符串?姑且算这样,然后呢,你要配什么东东?也不知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-12 21:26:58 | 显示全部楼层
本帖最后由 shabum 于 2020-7-12 21:31 编辑
Stubborn 发表于 2020-7-12 21:15
我翻遍了论坛,你先和我说说,这个正则是什么意思呀?


我匹配的是999zw这个字符串   只匹配前面不是999后面不是zw的字符串  然后正常第三个9 和z这个中间有个位置由于不符合 应该不会被添加逗号对吧?  我想知道是为什么  ,9,9,9,z,w,   里面还是出现逗号了?

或者简单说 这个 ,9,9,9,z,w , 结果为什么9,z 有逗号   我理解这个表达式 9,z  这里应该是 9z 中间没逗号的  所以我想知道我哪里理解错了的原因   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-12 21:34:33 | 显示全部楼层
shabum 发表于 2020-7-12 21:26
我匹配的是999zw这个字符串   只匹配前面不是999后面不是zw的字符串  然后正常第三个9 和z这个中间有个 ...


你筛完条件之后呢,配什么,你都不写?

print(re.sub(r"(?<!999(?!zw))999zw",",","999999zwzw"))
print(re.sub(r"(?<!999(?!zw))999zw",",","888999zwzv"))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-12 21:36:16 | 显示全部楼层
Stubborn 发表于 2020-7-12 21:34
你筛完条件之后呢,配什么,你都不写?

print(re.sub(r"(?

写了  这是sub 符合条件就替换成逗号   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-12 21:40:34 | 显示全部楼层
Stubborn 发表于 2020-7-12 21:34
你筛完条件之后呢,配什么,你都不写?

print(re.sub(r"(?
print(re.sub(r"(?<!999(?!zw))",",","999zw"))     返回 ,9,9,9,z,w,  
print(re.sub(r"(?<!999(?!zw))",",","999zzw"))  返回是 ,9,9,9z,z,w,
这段话就是如果 不是999 又不是zw 就会替换成逗号  否则不会替换  我现在就不理解 返回的结果 ,9,9,9,z,w
为什么9,z 有逗号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-12 22:06:12 | 显示全部楼层
shabum 发表于 2020-7-12 21:40
这段话就是如果 不是999 又不是zw 就会替换成逗号  否则不会替换  我现在就不理解 返回的结果 ,9,9,9,z ...

999zzw超标了,判定结尾不是zw,而是zzw,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-12 22:26:11 | 显示全部楼层
Stubborn 发表于 2020-7-12 22:06
999zzw超标了,判定结尾不是zw,而是zzw,

这个是 ?!   不是?=     有没一个过程?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 01:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表