非洲小土著 发表于 2020-7-27 01:51:20

关于正则表达式的匹配问题

r'ABC\\001'和r'ABC\001'为什么能匹配,但是反过来却不行?

re.search(r'ABC\\001',r'ABC\001')

陈尚涵 发表于 2020-7-27 08:51:29

zltzlt 发表于 2020-7-27 08:48
ABC\\001 包含 ABC\001,而 ABC\001 不包含 ABC\\001,这个应该很好理解的

嗯,2楼说的对,ABC\001是不包含ABC\\001,而ABC\\001包含ABC\001

陈尚涵 发表于 2020-7-27 08:52:06

zltzlt 发表于 2020-7-27 08:48
ABC\\001 包含 ABC\001,而 ABC\001 不包含 ABC\\001,这个应该很好理解的

如果帮到你了,设个最佳答案怎么样啊?

zltzlt 发表于 2020-7-27 08:52:22

陈尚涵 发表于 2020-7-27 08:52
如果帮到你了,设个最佳答案怎么样啊?

陈尚涵 发表于 2020-7-27 08:53:01

zltzlt 发表于 2020-7-27 08:52


???

陈尚涵 发表于 2020-7-27 08:54:01

zltzlt 发表于 2020-7-27 08:52


额,回复错了,以为你是楼主了{:10_257:}

zltzlt 发表于 2020-7-27 08:54:29

陈尚涵 发表于 2020-7-27 08:54
额,回复错了,以为你是楼主了

{:10_250:}没关系啦

陈尚涵 发表于 2020-7-27 08:56:49

zltzlt 发表于 2020-7-27 08:54
没关系啦

我刚好问你一个问题:勋章怎么得啊

zltzlt 发表于 2020-7-27 08:57:14

陈尚涵 发表于 2020-7-27 08:56
我刚好问你一个问题:勋章怎么得啊

https://fishc.com.cn/home.php?mod=medal

符合要求可以直接领取

陈尚涵 发表于 2020-7-27 08:58:43

zltzlt 发表于 2020-7-27 08:57
https://fishc.com.cn/home.php?mod=medal

符合要求可以直接领取

这是哪个菜单啊,我找不到。

zltzlt 发表于 2020-7-27 08:59:25

陈尚涵 发表于 2020-7-27 08:58
这是哪个菜单啊,我找不到。

BIO-张磊 发表于 2020-7-27 09:00:22

本帖最后由 BIO-张磊 于 2020-7-27 09:16 编辑

re.search(pattern,string)
其中pattern进行了两步转义,而string只进行一步转义,举个例子
re.search('ABC\\001','ABC\\001')
这个你可能认为是完全匹配,其实是错误的,pattern部分的ABC\\001其实变成了ABC\x01(因为这里先ABC\\001转义变成ABC\001再转义变成了ABC\x01),而string部分的ABC\\001是ABC\001(只进行了ABC\001的转义)
所以上面的完全匹配应该是
re.search('ABC\\001','ABC\001')

我们再来看看r这个符号
r符号只是避免了第一次转义,那也就是说re.search的pattern部分的两次转义变成了第一步不进行,直接第二步转义,而string部分的转义就没有了(因为它只有第一步转义)
所以
re.search(r'ABC\\001',r'ABC\\001')#pattern部分的r'ABC\\001'变成ABC\001,而string部分的r'ABC\\001'就是ABC\\001
re.search(r'ABC\001',r'ABC\\001')#pattern部分的r'ABC\001'变成ABC\x01,而string部分的r'ABC\\001'就是ABC\\001
没结果
但是
re.search(r'ABC\\001',r'ABC\001')#其中pattern部分的r'ABC\\001'变成ABC\001,string部分的r'ABC\001'就是ABC\001
可以匹配

陈尚涵 发表于 2020-7-27 09:01:00

zltzlt 发表于 2020-7-27 08:59


哦,那我今天得再发2个帖子,这样.......

陈尚涵 发表于 2020-7-27 09:19:54

zltzlt 发表于 2020-7-27 08:57
https://fishc.com.cn/home.php?mod=medal

符合要求可以直接领取

终于把这三个勋章集齐了,可不容易啊

zltzlt 发表于 2020-7-27 09:24:26

陈尚涵 发表于 2020-7-27 09:19
终于把这三个勋章集齐了,可不容易啊

哈哈哈{:10_275:}

sunrise085 发表于 2020-7-27 09:45:07

本帖最后由 sunrise085 于 2020-7-27 09:56 编辑

zltzlt 发表于 2020-7-27 08:48
ABC\\001 包含 ABC\001,而 ABC\001 不包含 ABC\\001,这个应该很好理解的

二楼说的好像不对吧??
这不是因为包含问题吧?
re.search(pattern,string)
r'ABC\\001'在pattern中的话,匹配的就是 原始字符串'ABC\001',原始字符串'ABC\001'在python中的写法有两种: r'ABC\001' 和 'ABC\\001'
若r'ABC\001'在pattern中的话,则只能匹配字符串'ABC\001'
你需要知道在python中'\xxx'是什么意思,字符串中出现一个反斜杠后面跟着少于三位数的小于8的数字,说明这是一个8进制的ASCII码,若出现在pattern中则需要是0开头的小于8的数字,0后面最多三位小于8的数字
你可以试试:re.search(r'abc\012','abc\n')    re.search(r'abc\060','abc0')

zltzlt 发表于 2020-7-27 09:48:47

sunrise085 发表于 2020-7-27 09:45
二楼说的好像不对吧??
这不是因为包含问题吧?
re.search(pattern,string)


{:10_245:}差点误人子弟了
页: [1]
查看完整版本: 关于正则表达式的匹配问题