设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生
打印 上一主题 下一主题

【Python 第56课】 正则表达式(2)

[复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

11#
发表于 2016-2-3 22:27:27 |显示全部楼层
fangweiren 发表于 2016-2-3 13:39
Cross先生,为什么不能用^表示开头,$表示结尾,试了好多,输不出结果

^是表示整个字符串的开头,$是整个字符串的结尾,同时加了这两个,那除非整串完全匹配
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

12#
发表于 2016-2-3 22:29:27 |显示全部楼层
fangweiren 发表于 2016-2-3 13:39
Cross先生,为什么不能用^表示开头,$表示结尾,试了好多,输不出结果

^是表示整个字符串的开头,$是整个字符串的结尾,同时加了这两个,那除非整串完全匹配
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

13#
发表于 2016-2-3 22:33:14 |显示全部楼层
fangweiren 发表于 2016-2-3 13:39
Cross先生,为什么不能用^表示开头,$表示结尾,试了好多,输不出结果

^是表示整个字符串的开头,$是整个字符串的结尾,同时加了这两个,那除非整串完全匹配
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

14#
发表于 2016-2-3 22:33:57 |显示全部楼层
fangweiren 发表于 2016-2-3 13:39
Cross先生,为什么不能用^表示开头,$表示结尾,试了好多,输不出结果

^是表示整个字符串的开头,$是整个字符串的结尾,同时加了这两个,那除非整串完全匹配
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

15#
发表于 2016-2-3 22:34:12 |显示全部楼层
fangweiren 发表于 2016-2-3 13:39
Cross先生,为什么不能用^表示开头,$表示结尾,试了好多,输不出结果

^是表示整个字符串的开头,$是整个字符串的结尾,同时加了这两个,那除非整串完全匹配
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

16#
发表于 2016-2-4 21:45:54 |显示全部楼层
xqqxjnt1988 发表于 2016-2-4 14:02
crossing先生,请帮我看看这个问题啊,谢谢

#!/usr/bin/python

转不转义和是不是单引号双引号没关系。

正则里加r,是保证这个规则不转义,所以这个规则字符串是\b \S,它们应用到搜索,是去匹配对应的规则。
如果是要匹配\b或者\S这种字符本身,那这个规则要防止这些元字符的转义。所以得用r"\\b" r"\\S"

可能比较绕。建议自己把几种情况再多试试,体会一下
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

17#
发表于 2016-2-4 21:55:24 |显示全部楼层
catherinemic 发表于 2016-2-2 14:46
Crossin老师,想问一下,既然r'\bhi'表示非转译的原始字符‘\bhi',但是为什么re.findall(r'\bhi', text)的 ...

我前面说的可能有点不对。如果一段话中有\bhi这个文字,你想匹配出来,规则需要写成
r"\\bhi"
以防止\b作为特殊元字符去匹配
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

18#
发表于 2016-2-4 22:05:04 |显示全部楼层
catherinemic 发表于 2016-2-2 14:46
Crossin老师,想问一下,既然r'\bhi'表示非转译的原始字符‘\bhi',但是为什么re.findall(r'\bhi', text)的 ...

我前面说的可能有点不对。如果一段话中有\bhi这个文字,你想匹配出来,规则需要写成
r"\\bhi"
以防止\b作为特殊元字符去匹配
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

19#
发表于 2017-1-31 10:54:08 |显示全部楼层
红白姬 发表于 2017-1-31 10:20
C老师你好,
为什么这样输出的结果是["\\b"]而不是["\b"]?不是应该匹配出"\b"这个字符的吗?
============ ...

正则的规则:
\b 表示匹配单词边界
\\ 表示匹配字符 \
\\b 表示匹配字符 \b

所以最后匹配出的结果是 \b,因为字符串转义,在字符串中的显示是 \\b(list中保持原始的字符状态)
如果你 print m[0],就看到输出是 \b
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

20#
发表于 2017-2-1 11:17:24 |显示全部楼层
红白姬 发表于 2017-1-31 11:11
懂了,谢谢老师
请问老师,我直接print "\b"
打印出的这个是什么字符啊?

回退键
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-2 23:14 , Processed in 0.030611 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部