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 展开
想用以下方式输出,却总是无输出(应该是没有匹配到),但是换成p=re.compile(’1[358]\d{9}|147\d{8}')又可以了,这是为什么??
for match in re.findall(p, input):
print match 展开
3个回答
展开全部
^表示开始的意思。$表示结尾。match这个东西很奇怪。它是从开始做匹配的。 通常我会使用search而不是用match。 findall也是用search的机制。因为它是findall所以,就不可能用^作为字符串开头。因为字符串只有一个开头,但是有很多的”电话号码“。同样一个字符串也只有一个结尾 。你如果有结尾也不合适。
追问
因为在匹配时有一些不正确的数字会匹配进去,比如从身份证号提取了一段认为是手机号码,我就想写一个只匹配我表达是里面的那些,应该怎么做呢?
追答
身份证号显然,它前面与后面都不是数字。可以试试这样的方法(?<!\d+)1\d{10}
还有一个办法,你把所有数字串全整段出来了\d+。然后检查长度,如果18就是身份证,如果是11就是手机。
展开全部
可能你的input变量里面可能是有回车符或其他。所以结尾是\r而不是\d.另外上面那个表达式的第一个引号写错了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你把
p=re.compile(‘^1[358]\d{9}$|^147\d{8}$')
修改成
p=re.compile(/^1[358]\d{9}$|^147\d{8}$/)
再试试
更多追问追答
追问
还是不行,而且加一个/也不明白是什么道理
追答
加斜杠是更规范的写法 有些语言使用正则匹配的时候 你用引号包的意思就是匹配字符串 用/的意思就是匹配正则表达式。
不过阁下说不加^$时能匹配到 加了却匹配不到 可能是你的字符串不纯正 看得出你要匹配的是电话号码 不过你的字符串在电话号码前后还有其它字符吗 包括空字符也不行
因为^表示匹配字符串的开始 $表示匹配字符串的结尾 若你同时使用这两个 那么则保证字符串是与你要匹配的是绝对一致的 两端都不得有其它字符才行
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询