python正则表达式 如何找到指定字符后面完整的数字字符串

源串:s='ID:042SEX:MDOB:1967-08-17Status:Active1968'p=re.compile(r'(19|20)\d{2}')s='ID:0... 源串: s = 'ID: 042 SEX: M DOB: 1967-08-17 Status: Active 1968'
p = re.compile(r'(19|20)\d{2}')
s = 'ID: 042 SEX: M DOB: 1967-08-17 Status: Active 1968'
print p.search(s).group()
print p.findall(s)
我想找到19或20开头的, 后面捡完整的2位数字, 如 上面的表达式,
当调用 search的时候, 我希望输出 1967和1968, 而 p.findall我希望输出['1967','1968']
展开
 我来答
就烦条0o
2018-08-03 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46492
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部

使用re模块的search函数,能过正则表达式查找,代码如下:

import re
reg=re.compile(r"(?<=指定字符)\d+")
match=reg.search("待查找文本")
print match.group(0)

(?<=指定字符)此部分定位指定字符,查找但不包含

\d+此部分为一个以上数字

这样就可以查找出数字字符串

百度网友4ce135a
推荐于2017-11-25
知道答主
回答量:19
采纳率:0%
帮助的人:17万
展开全部
1. 首先 p.search(s) 只会找第一个匹配的字符串
2. 其次 p.findall(s) 会记录匹配的组,而(19|20) 代表一个组,应该改成(?:19|20)

以下代码可以满足你的要求:
# -*- coding: utf-8 -*-
from __future__ import print_function, division
import re

s = 'ID: 042 SEX: M DOB: 1967-08-17 Status: Active 1968'
p = re.compile(r'(?:19|20)\d{2}')
#s = 'ID: 042 SEX: M DOB: 1967-08-17 Status: Active 1968'
all_items = re.findall(p,s)
map(print, all_items)
print(all_items)
追问
没有再简单点的方式了么?  比如用一条语句 search或match搞定 多谢
追答
...这已经很简单了..。你追求代码量少?

# -*- coding: utf-8 -*-
import re

s = 'ID: 042 SEX: M DOB: 1967-08-17 Status: Active 1968'
p = re.compile(r'(?:19|20)\d{2}')
print " ".join(re.findall(p,s))
print re.findall(p,s)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式