那个我有个疑问 关于正则表达式的
(?=999(?!zw)) 这个执行顺序会是如何执行的?{:10_299:}用 999zzw 和 999zw这两个字符串
我理解是 ?<!999由于这个是逆向的 他会向左看直到最后面999 的9右边有个位置判断了左面是 999不能匹配 正常应该是没逗号
但是神奇是 999zw这个字符串我按照我上面的想法理论是 999zw应该是 ,9,9,9z,w,吧?但是却是 ,9,9,9,z,w,求大佬解答一下。。。。。{:10_247:} 能把完整代码发上来吗? 本帖最后由 shabum 于 2020-7-12 18:31 编辑
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,
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, shabum 发表于 2020-7-12 18:30
print(re.sub(r"(?
?<!999, 如果一个字符串之前不是"999"才做匹配
你想配啥,怎么配? Stubborn 发表于 2020-7-12 19:06
?
我想知道这个匹配过程我想不通re.sub(r"(?<!999(?!zw))",",","999zw" 这个加逗号为什么 在999最右面的 9和z中间那个位置 Stubborn 发表于 2020-7-12 19:06
?
我理解是(?<!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, 也就是替换逗号呢? Stubborn 发表于 2020-7-12 19:06
?
请问知道吗{:10_266:} 本帖最后由 Stubborn 于 2020-7-12 21:23 编辑
shabum 发表于 2020-7-12 20:31
请问知道吗
我翻遍了论坛,你先和我说说,这个正则是什么意思呀?{:10_255:}
(?<!FishC)\.com 只匹配前边不是 "FishC" 的字符串 ".com"
FishC(?!\.com) 只匹配后边不是 ".com" 的字符串 "FishC"
(?<!999(?!zw)) 只匹配前面不是999后面不是zw的字符串?姑且算这样,然后呢,你要配什么东东?也不知道
本帖最后由 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 中间没逗号的所以我想知道我哪里理解错了的原因 {:10_250:} 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"))
Stubborn 发表于 2020-7-12 21:34
你筛完条件之后呢,配什么,你都不写?
print(re.sub(r"(?
写了这是sub 符合条件就替换成逗号 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 有逗号 shabum 发表于 2020-7-12 21:40
这段话就是如果 不是999 又不是zw 就会替换成逗号否则不会替换我现在就不理解 返回的结果 ,9,9,9,z ...
999zzw超标了,判定结尾不是zw,而是zzw, Stubborn 发表于 2020-7-12 22:06
999zzw超标了,判定结尾不是zw,而是zzw,
这个是 ?! 不是?= 有没一个过程?
页:
[1]