目前在自学python,已经一个多月了,学的有些艰难,被正则表达式卡住了,求解以上两题
我陆陆续续更新了三个关于Python编程方面的专栏(PS: 下面会详细介绍这些专栏)。每个专栏都突出介绍了需要不同阶段需要掌握的知识点,各有侧重点。不过美中不足的是还没有一个全面完善的学习路线图将专栏串联起来。
这就好比去一个陌生地方没有地图一样,我们不能走一步算一步,摸着石头过河,而是要走好这一步,想好下一步,知道自己的目标以及要走的路。
故在此我专门用一篇文章介绍Python开发工程师需要掌握的相关知识点以及相关知识点的学习路线图。
有了这份学习路线图,妈妈再也不会担心我找不到好工作了。
对于如何使用正则表达式对身份证号码进行匹配识别,可以采用Python标准库re来实现。具体步骤如下:
pattern = r'\d{17}[\dXx]'
其中,\d表示匹配数字,{17}表示匹配17个连续数字,[\dXx]表示匹配最后一位数字或字母(X或x代表10)。
import re
string = '身份证号码是:370983199012111234'
match = re.search(pattern, string)
if match:
id_number = match.group() # 获取匹配到的身份证号码
else:
print('未找到身份证号码')
对于是否需要先将身份证号码提取出来进行匹配,这取决于需要匹配的字符串中是否包含多个身份证号码。如果是包含多个身份证号码的情况,需要先将每个身份证号码提取出来进行逐一匹配;如果只有一个身份证号码,可以直接对包含身份证号码和归属地信息的字符串进行匹配。
import re
from datetime import datetime
id_card_regex = r"^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})(\d|X)$"
id_card = input("请输入18位身份证号码: ")
match = re.match(id_card_regex, id_card)
if not match:
print("无效的身份证号码!")
else:
# 生日
birthday = datetime.strptime(match.group(2) + match.group(3) + match.group(4), "%Y%m%d")
# 性别
gender_code = int(match.group(5)[-2:])
gender = "男" if gender_code % 2 == 1 else "女"
# 省份
province_codes = {
"11": "北京市",
"12": "天津市",
"13": "河北省",
"14": "山西省",
"15": "内蒙古自治区",
"21": "辽宁省",
"22": "吉林省",
"23": "黑龙江省",
"31": "上海市",
"32": "江苏省",
"33": "浙江省",
"34": "安徽省",
"35": "福建省",
"36": "江西省",
"37": "山东省",
"41": "河南省",
"42": "湖北省",
"43": "湖南省",
"44": "广东省",
"45": "广西壮族自治区",
"46": "海南省",
"50": "重庆市",
"51": "四川省",
"52": "贵州省",
"53": "云南省",
"54": "西藏自治区",
"61": "陕西省",
"62": "甘肃省",
"63": "青海省",
"64": "宁夏回族自治区",
"65": "新疆维吾尔自治区",
"83": "台湾省",
"81": "香港特别行政区",
"82": "澳门特别行政区"
}
province_code = match.group(1)
province = province_codes.get(province_code, "未知省份")
print("生日: ", birthday.strftime("%Y-%m-%d"))
print("性别: ", gender)
print("省份: ", province)