python 正则匹配^和$使用问题

我写了一个匹配手机的正则表达式p=re.compile(‘^1[358]\d{9}$|^147\d{8}$')想用以下方式输出,却总是无输出(应该是没有匹配到),但是换成... 我写了一个匹配手机的正则表达式p=re.compile(‘^1[358]\d{9}$|^147\d{8}$')
想用以下方式输出,却总是无输出(应该是没有匹配到),但是换成p=re.compile(’1[358]\d{9}|147\d{8}')又可以了,这是为什么??
for match in re.findall(p, input):
print match
展开
 我来答
bdwisyou7d
2014-07-30 · TA获得超过1.3万个赞
知道大有可为答主
回答量:3774
采纳率:81%
帮助的人:1085万
展开全部
^表示开始的意思。$表示结尾。match这个东西很奇怪。它是从开始做匹配的。 通常我会使用search而不是用match。 findall也是用search的机制。因为它是findall所以,就不可能用^作为字符串开头。因为字符串只有一个开头,但是有很多的”电话号码“。同样一个字符串也只有一个结尾 。你如果有结尾也不合适。
追问
因为在匹配时有一些不正确的数字会匹配进去,比如从身份证号提取了一段认为是手机号码,我就想写一个只匹配我表达是里面的那些,应该怎么做呢?
追答
身份证号显然,它前面与后面都不是数字。可以试试这样的方法(?<!\d+)1\d{10} 

还有一个办法,你把所有数字串全整段出来了\d+。然后检查长度,如果18就是身份证,如果是11就是手机。
rwangnqian2012
2018-11-06 · TA获得超过155个赞
知道答主
回答量:16
采纳率:0%
帮助的人:6.7万
展开全部
可能你的input变量里面可能是有回车符或其他。所以结尾是\r而不是\d.另外上面那个表达式的第一个引号写错了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飲鴆_止渴
推荐于2016-02-08 · TA获得超过1232个赞
知道小有建树答主
回答量:400
采纳率:0%
帮助的人:543万
展开全部

你把

p=re.compile(‘^1[358]\d{9}$|^147\d{8}$')

修改成

p=re.compile(/^1[358]\d{9}$|^147\d{8}$/)

再试试

更多追问追答
追问
还是不行,而且加一个/也不明白是什么道理
追答
加斜杠是更规范的写法 有些语言使用正则匹配的时候 你用引号包的意思就是匹配字符串 用/的意思就是匹配正则表达式。

不过阁下说不加^$时能匹配到 加了却匹配不到 可能是你的字符串不纯正 看得出你要匹配的是电话号码 不过你的字符串在电话号码前后还有其它字符吗 包括空字符也不行
因为^表示匹配字符串的开始 $表示匹配字符串的结尾 若你同时使用这两个 那么则保证字符串是与你要匹配的是绝对一致的 两端都不得有其它字符才行
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式