免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: eeeee159963
打印 上一主题 下一主题

正则表达式中的一个疑问 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-11-24 15:09 |只看该作者
回复  eeeee159963

楼主看一下下面这个,你就明白了:
>>> "2x\+5y"
'2x\\+5y'
>>> "2x\\+5y"
'2x ...
ning_lianjie 发表于 2010-11-24 14:37

那么为什么说字符串前加r会转义呢,比如带前缀r的字符串中有”\n",会解释成一个反斜杠和一个n;
反而带前缀r的字符串中有”\+",就转义了呢

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:55:28IT运维版块每日发帖之星
日期:2016-07-29 06:20:00
12 [报告]
发表于 2010-11-24 15:58 |只看该作者
回复 11# eeeee159963


    因为“+”在python里面还有一个特殊的意义:
加号(+)操作符匹配它左边那个正则表达式模式至少出现一次的情况

论坛徽章:
0
13 [报告]
发表于 2010-11-24 16:32 |只看该作者
回复  eeeee159963

楼主看一下下面这个,你就明白了:
>>> "2x\+5y"
'2x\\+5y'
>>> "2x\\+5y"
'2x ...
ning_lianjie 发表于 2010-11-24 14:37


>>> "2x\+5y"
'2x\\+5y'
>>> "2x\\+5y"
'2x\\+5y'
这两个的结果为什么会一样呢

论坛徽章:
0
14 [报告]
发表于 2010-11-24 16:37 |只看该作者
本帖最后由 eeeee159963 于 2010-11-24 16:57 编辑
回复  eeeee159963


    因为“+”在python里面还有一个特殊的意义:
ning_lianjie 发表于 2010-11-24 15:58


n也有特殊意义啊,代表换行
不是说原始字符串里面所有的转义字符都不再转义了吗

论坛徽章:
0
15 [报告]
发表于 2010-11-24 16:59 |只看该作者
+是特殊字符,代表重复一次或多次。 \+是字符“+”的转义,有什么问题么?
donotblock 发表于 2010-11-24 12:27


不是说原始字符串对所有转义字符都不再转义了吗

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:55:28IT运维版块每日发帖之星
日期:2016-07-29 06:20:00
16 [报告]
发表于 2010-11-24 17:01 |只看该作者
回复 14# eeeee159963


    n没有特殊含义,是\n代表换行;\b表示退格,但是在python中,\b还表示匹配边缘

论坛徽章:
0
17 [报告]
发表于 2010-11-24 17:05 |只看该作者
回复  eeeee159963


    n没有特殊含义,是\n代表换行;\b表示退格,但是在python中,\b还表示匹配边缘 ...
ning_lianjie 发表于 2010-11-24 17:01


不是说原始字符串对所有转义字符都不再转义了吗

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:55:28IT运维版块每日发帖之星
日期:2016-07-29 06:20:00
18 [报告]
发表于 2010-11-24 17:15 |只看该作者
回复 17# eeeee159963


    我的理解是:在正则里面用原始字符串,是避免与ASCII的冲突。
在原始字符串里,所有的字符都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。

论坛徽章:
0
19 [报告]
发表于 2010-11-24 17:45 |只看该作者
回复  donotblock re.match( "2x\+5y",  "2x+5y" )
re.match( r"2x\+5y", "2x+5y" ),结果都能匹配。

我 ...
eeeee159963 发表于 2010-11-24 13:58



    你之所以不能理解是因为\+只会被正则转义,不会被python转义,因为+号对于python字符串来说不是什么特殊字符。。。也就是说‘2x\+5y' 与r‘2x\+5y'是一样的

论坛徽章:
0
20 [报告]
发表于 2010-11-24 17:49 |只看该作者
回复  eeeee159963

楼主看一下下面这个,你就明白了:
>>> "2x\+5y"
'2x\\+5y'
>>> "2x\\+5y"
'2x ...
ning_lianjie 发表于 2010-11-24 14:37



    这样他会更混淆,因为打印出来的东西会再转义一次。。。print('2x\\+py') 跟在提示符下输入‘2x\\+py'是不一样的。想知道是什么,print出来看
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP