python正则表达式对身份证的匹配识别归属地

img

img

目前在自学python,已经一个多月了,学的有些艰难,被正则表达式卡住了,求解以上两题

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7790188
  • 这篇博客你也可以参考下:python中编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径—— python学习笔记
  • 你还可以看下python参考手册中的 python- 嵌套的列表推导式
  • 除此之外, 这篇博客: Python学习路线【对标大厂Python开发工程师的招聘要求,并推荐优质免费资源】打卡学习不迷茫中的 前言(为什么写这篇文章) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 我陆陆续续更新了三个关于Python编程方面的专栏(PS: 下面会详细介绍这些专栏)。每个专栏都突出介绍了需要不同阶段需要掌握的知识点,各有侧重点。不过美中不足的是还没有一个全面完善的学习路线图将专栏串联起来。
    这就好比去一个陌生地方没有地图一样,我们不能走一步算一步,摸着石头过河,而是要走好这一步,想好下一步,知道自己的目标以及要走的路
    故在此我专门用一篇文章介绍Python开发工程师需要掌握的相关知识点以及相关知识点的学习路线图。
    有了这份学习路线图,妈妈再也不会担心我找不到好工作了。

  • 您还可以看一下 Toby老师的python机器学习-乳腺癌细胞挖掘课程中的 如何创建python虚拟编程环境-避免项目包版本冲突(选修)小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    对于如何使用正则表达式对身份证号码进行匹配识别,可以采用Python标准库re来实现。具体步骤如下:

    1. 首先,定义正则表达式模式,对于身份证号码,可以采用以下模式:
    pattern = r'\d{17}[\dXx]'
    

    其中,\d表示匹配数字,{17}表示匹配17个连续数字,[\dXx]表示匹配最后一位数字或字母(X或x代表10)。

    1. 然后,通过re模块的search函数来查找字符串中匹配的身份证号码:
    import re
    
    string = '身份证号码是:370983199012111234'
    match = re.search(pattern, string)
    if match:
        id_number = match.group() # 获取匹配到的身份证号码
    else:
        print('未找到身份证号码')
    
    1. 获取匹配到的身份证号码后,可以采用相关的工具或者API(如阿里云身份证归属地查询API)来进行归属地的匹配。

    对于是否需要先将身份证号码提取出来进行匹配,这取决于需要匹配的字符串中是否包含多个身份证号码。如果是包含多个身份证号码的情况,需要先将每个身份证号码提取出来进行逐一匹配;如果只有一个身份证号码,可以直接对包含身份证号码和归属地信息的字符串进行匹配。

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)