Python使用re库从列表提取特定id开头模式的技术求助
解决正则提取id+数字的问题
嘿,我来帮你搞定这个正则匹配的问题!你当前的代码有两个小问题,咱们一步步修正:
1. 原正则的核心问题
你写的r'id*'逻辑不对:*是匹配前面的字符0次或多次,这里它作用在d上,所以会匹配i、id、idd这类内容,完全没考虑后面的数字,这肯定拿不到你想要的id3、id33。
2. 正确的正则表达式
咱们要匹配的是以id开头,紧跟1个或多个数字的子串,所以正则应该写成:r'id\d+'
id:精确匹配这两个固定字符\d:匹配任意数字(等价于[0-9])+:要求前面的数字至少出现1次,确保不会匹配到单纯的id
3. 输入参数的修正
你把整个列表my_list传给了re.search,但这个函数的第二个参数必须是字符串!所以得先取列表里的第一个元素(也就是包含目标id的那个字符串)。
完整示例代码
import re # 示例输入 sample_list = ('CDI - AB - MO - id3 - Mobile', '2018-01-12', '48,67') # 提取包含目标的字符串 target_string = sample_list[0] # 执行匹配 match_obj = re.search(r'id\d+', target_string) # 检查是否匹配成功,避免报错 if match_obj: result = match_obj.group() print(result) # 输出: id3
额外优化(可选)
如果你需要忽略大小写(比如要匹配ID3、Id33这类情况),可以加上re.I参数:
match_obj = re.search(r'id\d+', target_string, re.I)
这样就能精准提取你想要的内容啦!
内容的提问来源于stack exchange,提问作者doingmybest
相关产品推荐
相关产品推荐

