regex 正则表达式匹配特定字符串,后跟6位数字

64jmpszr  于 2023-04-07  发布在  其他
关注(0)|答案(2)|浏览(159)

假设我有这四个字符串:

str1 = "license 123456"
str2 = "address 123456"
str3 = "license number 1234567"
str4 = "license num 1234"

我试图匹配所有的字符串,要么"permit"|"license"|"license number"|license num"后跟正好6位数字。
我试过这个表达:

re.search(r"(permit|license|license number|license num)\d{6}$", str)

据我所知,它应该匹配我的标准,但它显然也匹配超过6位的字符串(它不匹配小于6位的字符串)。
如何修复正则表达式?

mwngjboj

mwngjboj1#

我想这可能行得通:

^(permit|license|license number|license num)\s\d{6}$

这取决于你如何搜索:

\b(permit|license|license number|license num)\s\d{6}\b
slmsl1lt

slmsl1lt2#

首先是“许可证”|“许可证号”|licenseNum”是逻辑冗余,并且可以收缩为“license”本身。
其次,您没有指定可以在我们的许可证和数字之间出现的字符模式。这可以通过.* 来完成,因此主模式变为“permit|许可证。*[0-9]{6}$”
因此可以看到如下的结束代码

str1 = "license 123456"
str2 = "address 123456"
str3 = "license number 1234567"
str4 = "license num 1234"
str_lst=[str1,str2,str3,str4]
import re
for i in str_lst:
    try:
        print(re.search("permit|license.*[0-9]{6}$", i).string)
    except AttributeError :
        print('not matching')

相关问题