如何使用regex从以下文本中提取年份?

2024-10-01 05:05:03 发布

您现在位置:Python中文网/ 问答频道 /正文

1)2003 CPT Code: 90801 - Psychiatric Diagnos...
2)y1983 Clinic Hospital, first hospitalization, ...

每当我尝试使用\b[\d]{4}\b时,我都会从第一个语句中得到20039080,而从第二个语句中没有。你知道吗

我想要的输出是第一行的2003,第二行的1983


Tags: code语句firstcliniccpthospitaldiagnoshospitalization
3条回答

这是因为在开始处有\b,这意味着匹配单词边界处的数字,y1983与条件不匹配。你可以试试这个

\b\D?(\d{4})\b

查看demo上的解释

您可以拒绝任意一侧的数字,而不是在\b上匹配:

(?<!\d)\d{4}(?!\d)

https://regex101.com/r/shVhnT/1/

以下正则表达式应将第一个组捕获为数字:

(?<=\d\))[a-zA=Z]?(\d+)

我为您创建的示例如下: https://regex101.com/r/RXJmFu/1

例如:

s = ['1)2003 CPT Code: 90801 - Psychiatric Diagnos...',
'2)y1983 Clinic Hospital, first hospitalization, ...']

for match in s:
   print(re.findall(r'(?<=\d\))[a-zA=Z]?(\d+)', match)[0])

输出:

2003
1983

相关问题 更多 >