设为首页收藏本站

Crossin的编程教室

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

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

[复制链接]

7

主题

0

好友

127

积分

注册会员

Rank: 2

44#
发表于 2016-10-21 08:44:58 |只看该作者
对,就是。在第一个[]中它要么识别出( 要么识别出d{2,3} 在第二个[]中,它要么识别出) 要么识别出- 最后识别出d{7,8}
而现在是它识别出了第二个中的- 以及后面的d{7,8} 在第一个中,只识别出了1个数字字符。而我写的是d{2,3}
我想问的是为什么会出现这种情况
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

43#
发表于 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
回复

使用道具 举报

7

主题

0

好友

127

积分

注册会员

Rank: 2

42#
发表于 2016-10-19 15:54:29 |只看该作者
crossin先生 发表于 2016-10-19 14:04
中括号里表示任选一个字符
你不能把 \d{7} \d{8} 都放到中括号里,这样它还是认为是任意一个数字
\d{7,8} ...

我将表达式改成了这个:
r'[(\d{2,3}][)-]\d{7,8}'
结果,不可以识别:010-55667890这类的
它识别的结果是:['0-55667890']
请问,这是怎么回事?
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

41#
发表于 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
回复

使用道具 举报

7

主题

0

好友

127

积分

注册会员

Rank: 2

40#
发表于 2016-10-19 13:01:32 |只看该作者
请问:对于号码匹配
我写了如下:r'[(\d{1}]\d{2}[)-\d{1}][\d{7}\d{8}(\s\d{8})]'
请问是哪里出来问题?
回复

使用道具 举报

0

主题

0

好友

16

积分

新手上路

Rank: 1

39#
发表于 2016-8-29 08:26:16 |只看该作者
crossin先生 发表于 2016-8-26 23:45
是应该列表中的每个元素后面加上\n,然后writelines。而不是直接转字符串,你转字符串的时候把list的[]也 ...

谢谢,按楼主说的写就可以了
        m[0] = m[0] + '\n'
        n.writelines(m)
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

使用道具 举报

0

主题

0

好友

16

积分

新手上路

Rank: 1

37#
发表于 2016-8-26 16:32:39 |只看该作者
问一下楼主,我把号码以正则表达式匹配出来,想写入一个txt,writelines写入要怎么加换行呢,不处理号码都是连着排成一行,如下格式:
(021)88776543010-55667890025844533620571 66345673
如果把列表转换成字符串加上\n写入,虽然能换行了,但是txt中的号码会带上括号和引号很别扭,如下:
['(021)88776543']
['010-55667890']
['02584453362']
['0571 66345673']
要如何在txt文件中得到下面的格式呢?
(021)88776543
010-55667890
02584453362
0571 66345673

回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

36#
发表于 2016-6-4 22:37:56 |只看该作者
kuaikemai 发表于 2016-6-4 15:41
老师,在本次课中你说正则表达式也可以用来检测输入的信息是否符合规则。
像输入用户名、身份证号码等。具 ...

你这样是可行的的。不过正则本身就可以用^和$限定开头和结尾,限定了之后,能匹配出来就是正确,匹配不出来就是错误
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

14

积分

新手上路

Rank: 1

35#
发表于 2016-6-4 15:41:50 |只看该作者
老师,在本次课中你说正则表达式也可以用来检测输入的信息是否符合规则。
像输入用户名、身份证号码等。具体的操作是怎样的呢?
我自己的想法是,将input的字符串split后成list
然后运用re.findall应用规则,并得出另一个list m
用if语句看他们是不是 = =
这样是不是正确?
回复

使用道具 举报

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

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

GMT+8, 2024-9-27 22:11 , Processed in 0.015928 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部