实体识别 | 正则表达式:提取身份证号

 提取身份证号:

import re
text = "418193200001016666"
IDCards_pattern = r'^([1-9]\d{5}[12]\d{3}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])\d{3}[0-9xX])$'

IDs = re.findall(IDCards_pattern, text, flags=0)
print(IDs)

打印结果:

[('140581199509030032', '09', '03')]

附:

正则表达式的书写语法

1、^  表示匹配字符串的开始位置  (例外  用在中括号中[ ] 时,可以理解为取反,表示不匹配括号中字符串)

2、$  表示匹配字符串的结束位置

3、*  表示匹配 零次到多次

4、+  表示匹配 一次到多次 (至少有一次)

5、?  表示匹配零次或一次

6、.  表示匹配单个字符 

7、|  表示为或者,两项中取一项

8、(  ) 小括号表示匹配括号中全部字符

9、[  ] 中括号表示匹配括号中一个字符 范围描述 如[0-9 a-z A-Z]

10、{  } 大括号用于限定匹配次数  如 {n}表示匹配n个字符  {n,}表示至少匹配n个字符  {n,m}表示至少n,最多m

11、\  转义字符 如上基本符号匹配都需要转义字符   如 \*  表示匹配*号

12、\w 表示英文字母和数字  \W  非字母和数字

13、\d  表示数字   \D  非数字

 

### 使用正则表达式从身份证地址中提取省市区 要实现从身份证地址字符串中提取省份、城市和区县的信息,可以利用正则表达式的分组功能来捕获这些部分。以下是基于提供的引用内容以及补充的知识构建的具体方法。 #### 方法说明 通过定义一个复杂的正则表达式模式,能够识别并分离出中国的省级行政区名称(如“省”、“自治区”)、市级行政区名称(如“市”、“自治州”)以及县级行政区名称(如“区”、“县”)。此过程可以通过 JavaScript 或 Java 实现[^2]。 #### 正则表达式设计 以下是一个适用于大多数情况的正则表达式: ```javascript var regex = /(?<province>[^省]+省|.+自治区)|(?<city>[^自治州]+自治州|[^市]+市|[^盟]+盟|[^地区]+地区)|(?<district>[^市]+市|[^县]+县|[^区]+区)/g; ``` 该正则表达式分为三个主要部分: 1. **Province (省份)**:`([^省]+省|.+自治区)` —— 捕获以“省”结尾或者包含“自治区”的字段。 2. **City (城市)**:`([^自治州]+自治州|[^市]+市|[^盟]+盟|[^地区]+地区)` —— 匹配各种形式的城市名,包括但不限于“市”、“自治州”等。 3. **District (区/县)**:`([^市]+市|[^县]+县|[^区]+区)` —— 提取具体的区或县信息。 注意:上述正则表达式可能需要根据实际数据调整其复杂度与精确程度。 #### 示例代码 下面展示如何在 JavaScript 中应用这一逻辑: ```javascript // 定义正则表达式 const regex = /(?<province>[^省]+省|.+自治区)|(?<city>[^自治州]+自治州|[^市]+市|[^盟]+盟|[^地区]+地区)|(?<district>[^市]+市|[^县]+县|[^区]+区)/; // 输入样例地址 let address = "安徽省淮南市大通区"; // 执行匹配操作 let matches = [...address.matchAll(regex)]; // 解析结果到对象结构 let parsedAddress = { province: matches.find(m => m.groups['province'])?.groups['province'], city: matches.find(m => m.groups['city'])?.groups['city'], district: matches.find(m => m.groups['district'])?.groups['district'] }; console.log(parsedAddress); ``` 运行以上脚本将会返回如下输出: ```json { "province": "安徽省", "city": "淮南市", "district": "大通区" } ``` 对于更高级别的需求,比如进一步细化至乡镇甚至村庄级别,则需扩展原始正则表达式,并增加额外处理逻辑。 #### 数据存储模型 如果计划长期保存解析后的地址信息,建议创建类似于引用中的 `Address` 类型的数据实体类用于封装各层次级联关系[^3]: ```java @Data public class Address { private String province; // 省份 private String city; // 城市 private String district; // 区域 private String town; // 镇乡 private String detail; // 更具体位置描述 public Address(String province, String city, String district, String town, String detail){ this.province=province; this.city=city; this.district=district; this.town=town; this.detail=detail; } public Address(){} } ``` 这样不仅便于后续程序调用,也方便维护统一标准下的地理空间坐标体系。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值