我想从字符串中提取5个连续的数字
我写的代码。你知道吗
re.findall(r"((\D|^)*)\d\d\d\d\d((\D|$)*)", s)
但它不能传递字符串
"Helpdesk-Agenten (m/w) Kennziffer: 12966"
预期结果是:
12966
例2:
#input
"Helpdesk-Agenten (m/w) Kennziffer: 12966abc"
# expected
12966
例3:
#input
"Helpdesk-Agenten (m/w) Kennziffer: 12966345"
# expected
"" (because the length of continuous digits is longer than 5)
与
re.findall
一起使用的当前正则表达式(((\D|^)*)\d\d\d\d\d((\D|$)*)
)不会返回数字块,因为它们没有被捕获。此外,还有(\D|^)*
和(\D|$)*
部分是可选的,这意味着它们不执行它们应该执行的操作,正则表达式将在较长的数字块中找到5个数字块。你知道吗如果您必须找到5位数据块未与其他数字括在一起,请使用
参见regex demo
详细信息:
(?<!\d)
-当前位置前不允许有数字\d{5}
-5位(?!\d)
-当前位置后不允许有数字。你知道吗使用word boundary (^{}) ,匹配单词的开头/结尾:
\d\d\d\d\d
可以替换为\d{5}
:更新如果您需要从
12966abc
中获得12966
,请参阅Wiktor Stribiżew的答案,该答案使用了否定的lookaround断言。你知道吗或者
或者将简单正则表达式与列表理解结合起来:
相关问题 更多 >
编程相关推荐