- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
正则表达式面试题及答案
一、基础概念题(考察正则核心语法理解)
题目:解释正则中的.、*、?分别代表什么含义?举一个简单例子说明*和?的区别。
答案:
.:匹配任意单个字符(默认不包含换行符),比如a.c可匹配abc、a1c、a#c;
*:匹配前面的字符或子表达式0次或多次(贪婪匹配),比如ab*c可匹配ac(b出现0次)、abc(b出现1次)、abbbc(b出现3次);
?:有两种作用:①匹配前面的字符或子表达式0次或1次,比如ab?c只能匹配ac或abc;②跟在*/+后改为非贪婪匹配,比如a.*?c匹配aabc时,会取aabc中的aabc里的a到第一个c(即aabc中的aac?不对,修正:a.*?c匹配aabcc时,会匹配aabc而不是aabcc,而a.*c会匹配整个aabcc)。
区别例子:a*能匹配空字符串、a、aa,a?只能匹配空字符串或a。
题目:正则中如何匹配「数字」「字母」「下划线」?如何匹配「非数字」?分别写出对应的元字符。
答案:
数字:\d(等价于[0-9]);
字母+数字+下划线:\w(等价于[A-Za-z0-9_],注意:不包含中文);
非数字:\D(等价于[^0-9]),比如\D+可匹配一串非数字字符(如abc!@#)。
二、进阶应用题(考察实际场景匹配能力)
题目:写一个正则表达式,匹配中国大陆手机号(要求:11位数字,以13/14/15/17/18/19开头),并说明匹配逻辑。
答案:
正则表达式:^1[345789]\d{9}$
逻辑解释:
^:匹配字符串开头(确保手机号从开头开始匹配,避免前面有多余字符);
1:固定匹配手机号第一位(中国大陆手机号均以1开头);
[345789]:匹配第二位,只能是3、4、5、7、8、9中的一个(覆盖主流运营商号段);
\d{9}:匹配后面9位数字(11位手机号总长度,前面已占2位);
$:匹配字符串结尾(确保手机号后面没有多余字符,避免比如11位后加空格的情况)。
注意:实际项目中可能需要兼容国际区号(如+86),可调整为^(?:\+86)?1[345789]\d{9}$((?:)表示非捕获组,不单独提取+86)。
题目:如何用正则提取一段文本中所有的邮箱地址?写出正则并说明关键部分。
答案:
常用正则:\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b
关键部分解释:
\b:单词边界(避免邮箱和其他字符粘连,比如abc@163.comxyz不会被误匹配);
[A-Za-z0-9._%+-]+:匹配邮箱用户名(允许字母、数字、.、_、%、+、-,符合邮箱用户名规则);
@:固定匹配邮箱的@符号;
[A-Za-z0-9.-]+:匹配邮箱域名(如163.com中的163,gmail.co.uk中的gmail.co);
\.[A-Za-z]{2,}:匹配域名后缀(如.com、.co.uk,{2,}表示至少2个字母,覆盖.cn、.org等)。
三、实战场景题(考察问题解决能力)
题目:有一段HTML文本divclass=title正则面试题/divp这是内容/p,用正则提取divclass=title和/div之间的文本(即「正则面试题」),写出正则并说明思路。
答案:
正则表达式:divclass=title([^]+)/div
思路:
importre
html=divclass=title正则面试题/divp这是内容/p
result=re.search(rdivclass=title([^]+)/div,html)
print(result.group(1))#输出:正则面试题
先固定匹配目标标签的开头divclass=title;
用([^]+)捕获中间内容:[^]表示「非字符」(避免匹配到后面的/div标签),+表示匹配1次或多次(确保有内容),括号()表示捕获组,方便后续提取;
最后固定匹配标签结尾/div。
提取方式:在代码中(如Python),用re.search匹配后,通过group(1)获取捕获的内容,示例:
题目:用正则将字符串2024-05-2014:30:00中的「年、月、日、时、分、秒」分别提取出来,写出正则并说明如何获取各部分。
答案:
正则表达式:^(\d{4})-(\d{2})-(\d{2})(\d{2}):(\d{2}):(\d{2})$
提取思路:
consttimeStr=
文档评论(0)