如何使用正则表达式从以下文本中提取年份?

时间:2019-12-21 04:33:31

标签: python regex

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

每当我尝试使用\b[\d]{4}\b时,我都会从第一条语句中同时获得20039080,而第二条语句中却没有。

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

3 个答案:

答案 0 :(得分:2)

您可以拒绝两边的数字,而不必匹配(?<!\d)\d{4}(?!\d)

public function properties()
{
    return $this->belongsToMany(CarProperty::class,'car_car_properties');
}

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

答案 1 :(得分:1)

这是因为您开头有\b,这意味着要在单词边界处匹配数字,而y1983与条件不匹配。您可以试试看

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

demo上查看说明

答案 2 :(得分:0)

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

(?<=\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