设为首页收藏本站

Crossin的编程教室

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

【Python 第58课】 正则表达式(4)

[复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

11#
发表于 2016-8-26 23:45:04 |显示全部楼层
zgd1219 发表于 2016-8-26 16:32
问一下楼主,我把号码以正则表达式匹配出来,想写入一个txt,writelines写入要怎么加换行呢,不处理号码都 ...

是应该列表中的每个元素后面加上\n,然后writelines。而不是直接转字符串,你转字符串的时候把list的[]也给转进去了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

12#
发表于 2016-10-19 14:04:05 |显示全部楼层
Tony 发表于 2016-10-19 13:01
请问:对于号码匹配
我写了如下:r'[(\d{1}]\d{2}[)-\d{1}][\d{7}\d{8}(\s\d{8})]'
请问是哪里出来问题? ...

中括号里表示任选一个字符
你不能把 \d{7} \d{8} 都放到中括号里,这样它还是认为是任意一个数字
\d{7,8}这样倒是可以
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

13#
发表于 2016-10-20 13:50:58 |显示全部楼层
Tony 发表于 2016-10-19 15:54
我将表达式改成了这个:
r'[(\d{2,3}][)-]\d{7,8}'
结果,不可以识别:010-55667890这类的

还是一样啊,你用
[(\d{2,3}][)-]
那它还是会只认其中任何一个字符
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

14#
发表于 2016-10-21 13:27:56 |显示全部楼层
Tony 发表于 2016-10-21 08:44
对,就是。在第一个[]中它要么识别出( 要么识别出d{2,3} 在第二个[]中,它要么识别出) 要么识别出- 最后识 ...

d{2,3}别放在中括号里,和前面说的问题一样,你放在中括号里,不会给你区分是(或d{2,3},而是整个这些里面任何一个字符
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

15#
发表于 2016-10-22 15:29:20 |显示全部楼层
Tony 发表于 2016-10-21 15:42
也就是说这样:[(\d{2,3}]
对于:
(

不是,你这么写,和你写[(\d],甚至[(\d+]是一个效果,中括号里是任取一个字符,所以不管你里面的规则几个,加了中括号都是任取一个
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

16#
发表于 2016-10-23 22:43:15 |显示全部楼层
Tony 发表于 2016-10-23 21:00
哦,总算明白了。谢谢了哈!
还有,学完了这个,请问有好的书籍或者练手项目推荐没? ...

可以看看这个
《Python进阶》
https://eastlakeside.gitbooks.io/interpy-zh/content/
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

17#
发表于 2017-7-16 17:56:11 |显示全部楼层
swinh 发表于 2017-7-15 18:08
[)- ]python3.x报错

确实,中括号里的 - 需要转义为 \-,除非在括号开头或者结尾
因为同时它还有别的含义,表示从一个字符到另一个字符
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

18#
发表于 2017-9-22 22:47:55 |显示全部楼层
chchch0720 发表于 2017-9-22 10:41
先生,我用\(?0\d{2,3}[\) \-]?\d{8}
匹配一大串数字,比如0258445336205,他会把后一串的0也加进去,这怎 ...

\(?0\d{2,3}?[\) \-]?\d{8}

但你这个所有号码连在一起,本来就会有歧义,很难处理
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

19#
发表于 2018-2-22 13:05:30 |显示全部楼层
IRVING_LEE 发表于 2018-2-21 19:49
先生,不知道你还在不在:)
我第一次的时候在正则表达式两端加上了 \b
然后发现(021)88776543这个号码就 ...

\b 的话,会识别标点和数字交界
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

20#
发表于 2018-5-16 09:40:53 |显示全部楼层
宝丁 发表于 2018-5-15 10:12
先生好:
(?: exp)  #exp是正则表达式
这样子不捕获也不参与组号分配,这样做的原因是为了对那些只用一次的 ...

你不要捕获exp匹配的内容,只需要用它来定位
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

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

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

GMT+8, 2024-5-18 04:58 , Processed in 0.031400 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部