面试题答案
一键面试import re
text = "tag1:value1;abc:no_numbers;tag2:value2;abc:with1number;abc:onlyletters"
pattern = r';abc:([^;]*[^0-9][^;]*)'
matches = re.findall(pattern, text)
for match in matches:
print(match)
正则表达式解释
;
:匹配文本中的分号,用于分割不同的tag:value
组合,确保我们从正确的位置开始查找abc
标签。abc
:直接匹配标签部分为abc
,这是题目要求提取的特定标签。:
:匹配abc
标签后的冒号,用于分隔标签和值。([^;]*[^0-9][^;]*)
:这是一个捕获组,用于提取值部分。[^;]*
:匹配除分号以外的任意字符,0次或多次。这确保了在遇到下一个分号之前,尽可能多的匹配字符。[^0-9]
:匹配一个非数字字符,这是为了确保值中至少有一个非数字字符,符合值不包含数字的要求。[^;]*
:再匹配一次除分号以外的任意字符,0次或多次。这是为了匹配在非数字字符之后到下一个分号之前的所有字符。
整个正则表达式的逻辑是,先找到分号分隔符,再匹配特定的 abc
标签及后面的冒号,然后通过捕获组提取符合不包含数字要求的值。re.findall
函数用于在文本中查找所有符合该正则表达式模式的内容,并返回捕获组中的值。