Python正则表达式(regex)作为文本处理的强大工具,在编程面试中占据重要地位。然而,其复杂性和灵活性也使得它成为许多候选人的痛点。本文将深入剖析Python正则表达式面试中的难点问题,揭示易错点,并提供解题思路与代码示例,助您在面试中从容应对。
面试题:编写正则表达式匹配电子邮件地址,并提取域名部分。
易错点与避免策略:
()
进行分组,可以方便地提取匹配的部分。记住,\d
匹配单个数字,\D
匹配单个非数字字符,\w
匹配单个字母或数字,\W
匹配单个非字母或数字字符。代码示例:
import re
pattern = r'(?P<username>\w+)(\.(?P<middle>\w+))?\@(?P<domain>[A-Za-z0-9.-]+)\.[A-Za-z]{2,}'
email = 'john.doe@example.com'
match = re.match(pattern, email)
if match:
username = match.group('username')
middle = match.group('middle') or ''
domain = match.group('domain')
print(f"Username: {username}, Middle Name: {middle}, Domain: {domain}")
else:
print("Invalid email address")
面试题:编写正则表达式匹配连续重复的单词,并计算重复次数。
易错点与避免策略:
*
、+
、?
、{m,n}
是贪婪的,尽可能多地匹配字符。使用*?
、+?
、??
、{m,n}?
可改为非贪婪匹配,尽早停止匹配。re.findall()
或re.finditer()
:这两个函数分别以列表和迭代器形式返回所有匹配结果,便于统计重复次数。代码示例:
import re
text = "the cat in the hat the dog"
pattern = r'\b(\w+)\s+\1\b'
matches = re.findall(pattern, text)
word_counts = {match[0]: len(match) // 2 for match in matches}
print(word_counts)
面试题:编写正则表达式匹配HTML标签之间的文本内容,且不包含其他嵌套标签。
易错点与避免策略:
(?<=start)
正向预查断言和(?=end)
正向后查断言,可以在不消耗字符的情况下确保匹配位置符合特定条件。代码示例:
import re
html = '<div class="content">Hello <em>world</em></div>'
pattern = r'(?<=<div[^>]*>)\s*(.*?)(?=\s*</div>)'
match = re.search(pattern, html)
if match:
content = match.group(1)
print(content)
else:
print("No matching content found")
精通Python正则表达式的关键在于理解其基本语法、熟练运用各种匹配模式与量词,并能在实际问题中灵活应用零宽断言等高级特性。通过剖析面试中的难点问题,规避易错点,并结合代码示例进行实践,您将在编程面试中展现出卓越的文本处理能力。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。