我想从字符串中提取5个连续数字
我写的代码.
re.findall(r"((\D|^)*)\d\d\d\d\d((\D|$)*)", s)
Run Code Online (Sandbox Code Playgroud)
但它不能传递字符串
"Helpdesk-Agenten (m/w) Kennziffer: 12966"
Run Code Online (Sandbox Code Playgroud)
预期的结果是:
12966
Run Code Online (Sandbox Code Playgroud)
例2:
#input
"Helpdesk-Agenten (m/w) Kennziffer: 12966abc"
# expected
12966
Run Code Online (Sandbox Code Playgroud)
例3:
#input
"Helpdesk-Agenten (m/w) Kennziffer: 12966345"
# expected
"" (because the length of continuous digits is longer than 5)
Run Code Online (Sandbox Code Playgroud)
您使用的当前正则表达式(((\D|^)*)\d\d\d\d\d((\D|$)*))re.findall将不会返回数字块,因为它们未被捕获.更多,这些(\D|^)*和
(\D|$)*部分是可选的,这意味着他们没有做他们应该做的事情,正则表达式将在更长的数字块中找到5个数字块.
如果您必须找到未包含其他数字的5位数字块,请使用
re.findall(r"(?<!\d)\d{5}(?!\d)", s)
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示
细节:
(?<!\d) - 当前位置之前不允许数字\d{5} - 5位数(?!\d) - 当前位置后不允许数字.