shabum 发表于 2020-7-12 17:44:59

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

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

我理解是 ?<!999由于这个是逆向的 他会向左看直到最后面999 的9右边有个位置判断了左面是 999不能匹配 正常应该是没逗号
但是神奇是 999zw这个字符串我按照我上面的想法理论是 999zw应该是 ,9,9,9z,w,吧?但是却是 ,9,9,9,z,w,求大佬解答一下。。。。。{:10_247:}

Stubborn 发表于 2020-7-12 18:25:09

能把完整代码发上来吗?

shabum 发表于 2020-7-12 18:29:30

本帖最后由 shabum 于 2020-7-12 18:31 编辑

Stubborn 发表于 2020-7-12 18:25
能把完整代码发上来吗?

已经发了

shabum 发表于 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,

shabum 发表于 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,

Stubborn 发表于 2020-7-12 19:06:40

shabum 发表于 2020-7-12 18:30
print(re.sub(r"(?

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

你想配啥,怎么配?

shabum 发表于 2020-7-12 19:10:04

Stubborn 发表于 2020-7-12 19:06
?

我想知道这个匹配过程我想不通re.sub(r"(?<!999(?!zw))",",","999zw"   这个加逗号为什么 在999最右面的 9和z中间那个位置      

shabum 发表于 2020-7-12 19:19:38

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,   也就是替换逗号呢?

shabum 发表于 2020-7-12 20:31:43

Stubborn 发表于 2020-7-12 19:06
?

请问知道吗{:10_266:}

Stubborn 发表于 2020-7-12 21:15:53

本帖最后由 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: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 中间没逗号的所以我想知道我哪里理解错了的原因   {:10_250:}

Stubborn 发表于 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"))

shabum 发表于 2020-7-12 21:36:16

Stubborn 发表于 2020-7-12 21:34
你筛完条件之后呢,配什么,你都不写?

print(re.sub(r"(?

写了这是sub 符合条件就替换成逗号   

shabum 发表于 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 有逗号

Stubborn 发表于 2020-7-12 22:06:12

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

999zzw超标了,判定结尾不是zw,而是zzw,

shabum 发表于 2020-7-12 22:26:11

Stubborn 发表于 2020-7-12 22:06
999zzw超标了,判定结尾不是zw,而是zzw,

这个是 ?!   不是?=   有没一个过程?
页: [1]
查看完整版本: 那个我有个疑问 关于正则表达式的