如果字符串以 n 位数字开头且没有更多则匹配

Match if string starts with n digits and no more

我有像 6202_52_55_1959.txt

这样的字符串

我想匹配以 3 位数字开头的数字。

所以 6202_52_55_1959.txt 不应该匹配,但 620_52_55_1959.txt 应该匹配。

import re
regexp = re.compile(r'^\d{3}')
file = r'6202_52_55_1959.txt'
print(regexp.search(file))

<re.Match object; span=(0, 3), match='620'> #I dont want this example to match

如果只有三位数字且后面没有更多数字,我怎样才能让它匹配?

使用模式 ^\d{3}(?=\D):

inp = ["6202_52_55_1959.txt", "620_52_55_1959.txt"]
for i in inp:
    if re.search(r'^\d{3}(?=\D)', i):
        print("MATCH:    " + i)
    else:
        print("NO MATCH: " + i)

这会打印:

NO MATCH: 6202_52_55_1959.txt
MATCH:    620_52_55_1959.txt

此处使用的正则表达式匹配:

^       from the start of the string
\d{3}   3 digits
(?=\D)  then assert that what follows is NOT a digit (includes end of string)

使用 negative lookahead:

regexp = re.compile(r'^\d{3}(?!\d)')