Regex 使用正则表达式获取特定连字符数字组合

Regex 使用正则表达式获取特定连字符数字组合,regex,python-3.x,string,text,Regex,Python 3.x,String,Text,我有下面的reg,它给出了 import re s = 'N18-2181, 59-year-old, E12-34567, O18-517, BL-17-1111, 18S-8, L1-12, 21-year old, 40-year-old, 67-years, BL-14-111, 91-years, AL-1-2, 01-13-2019, 1-22-2001' reg = r'[()\d-]{7,}' r1 = re.findall(reg,s) 但是我想要以下输出 ['18-2181

我有下面的
reg
,它给出了

import re
s = 'N18-2181, 59-year-old, E12-34567, O18-517, BL-17-1111, 18S-8, L1-12, 21-year old, 40-year-old, 67-years, BL-14-111, 91-years, AL-1-2, 01-13-2019, 1-22-2001'
reg = r'[()\d-]{7,}'
r1 = re.findall(reg,s)
但是我想要以下输出

['18-2181', '12-34567', '-17-1111', '-14-111', '01-13-2019', '1-22-2001']

如何调整
reg=r'[()\d-]{7,}'
以获得上面的输出?

此正则表达式应提供您想要的结果。它断言第一组包含至少一个字母字符,然后捕获一组字母数字字符,后跟1或2组
-
和数字

['N18-2181', 'E12-34567', 'O18-517', 'BL-17-1111', '18S-8', 'L1-12', '6BL-14-111', 'AL-1-2']


是什么使
185-8
BL-17-1111
有效但不
01-13-2019
?它实际上是
18S-8
,因此
01-13-2019
无效,因为它不包含字母
\b(?=\d*[A-Z])((?:[A-Z0-9]+)(?:-\d+){1,2})\b