关于正则表达式的匹配问题
r'ABC\\001'和r'ABC\001'为什么能匹配,但是反过来却不行?re.search(r'ABC\\001',r'ABC\001') zltzlt 发表于 2020-7-27 08:48
ABC\\001 包含 ABC\001,而 ABC\001 不包含 ABC\\001,这个应该很好理解的
嗯,2楼说的对,ABC\001是不包含ABC\\001,而ABC\\001包含ABC\001 zltzlt 发表于 2020-7-27 08:48
ABC\\001 包含 ABC\001,而 ABC\001 不包含 ABC\\001,这个应该很好理解的
如果帮到你了,设个最佳答案怎么样啊? 陈尚涵 发表于 2020-7-27 08:52
如果帮到你了,设个最佳答案怎么样啊?
? zltzlt 发表于 2020-7-27 08:52
?
??? zltzlt 发表于 2020-7-27 08:52
?
额,回复错了,以为你是楼主了{:10_257:} 陈尚涵 发表于 2020-7-27 08:54
额,回复错了,以为你是楼主了
{:10_250:}没关系啦 zltzlt 发表于 2020-7-27 08:54
没关系啦
我刚好问你一个问题:勋章怎么得啊 陈尚涵 发表于 2020-7-27 08:56
我刚好问你一个问题:勋章怎么得啊
https://fishc.com.cn/home.php?mod=medal
符合要求可以直接领取 zltzlt 发表于 2020-7-27 08:57
https://fishc.com.cn/home.php?mod=medal
符合要求可以直接领取
这是哪个菜单啊,我找不到。 陈尚涵 发表于 2020-7-27 08:58
这是哪个菜单啊,我找不到。
本帖最后由 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
可以匹配 zltzlt 发表于 2020-7-27 08:59
哦,那我今天得再发2个帖子,这样....... zltzlt 发表于 2020-7-27 08:57
https://fishc.com.cn/home.php?mod=medal
符合要求可以直接领取
终于把这三个勋章集齐了,可不容易啊 陈尚涵 发表于 2020-7-27 09:19
终于把这三个勋章集齐了,可不容易啊
哈哈哈{:10_275:} 本帖最后由 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') sunrise085 发表于 2020-7-27 09:45
二楼说的好像不对吧??
这不是因为包含问题吧?
re.search(pattern,string)
{:10_245:}差点误人子弟了
页:
[1]