正则表达式匹配5位数字子串未用数字括起来

Hel*_*lad 3 python regex

我想从字符串中提取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)

Wik*_*żew 5

您使用的当前正则表达式(((\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) - 当前位置后不允许数字.