如何在Python中使用正则表达式匹配USN?
给定USN:1722AB3401和范围:3401至3470 如果1722AB3433作为输入提供,则应显示有效的USN,如果不是(例如:1722AB3499),则应显示无效的USN 如何使用python解决这个问题 我尝试了以下方法(使用Python 3.6.x): 但是,如果我尝试输入1722AB3471,它会给我一个错误的答案,因为范围是从*3401到*3470 注:如何在Python中使用正则表达式匹配USN?,python,Python,给定USN:1722AB3401和范围:3401至3470 如果1722AB3433作为输入提供,则应显示有效的USN,如果不是(例如:1722AB3499),则应显示无效的USN 如何使用python解决这个问题 我尝试了以下方法(使用Python 3.6.x): 但是,如果我尝试输入1722AB3471,它会给我一个错误的答案,因为范围是从*3401到*3470 注: USN是大学序列号,您的期望是错误的,因为正则表达式显然允许3400..3479 我不赞成完全使用正则表达式进行验证的尝试,
USN是大学序列号,您的期望是错误的,因为正则表达式显然允许3400..3479 我不赞成完全使用正则表达式进行验证的尝试,即使它可以处理像这样复杂的表达式
pattern = r"1722AB34(([0-6][0-9])|70)"
我会尝试提取字符后面的数字并进行数字比较。您的期望是错误的,因为您的正则表达式显然允许3400..3479 我不赞成完全使用正则表达式进行验证的尝试,即使它可以处理像这样复杂的表达式
pattern = r"1722AB34(([0-6][0-9])|70)"
我将尝试提取字符后面的数字并进行数字比较。
[0-7][0-9]
将从00匹配到79。您需要使用:
pattern = r"1722AB34(0[1-9]|[1-6][0-9]|70)"
这将从01到09
或从10到69
或70
但是获取最后四位数字,然后转换为整数并进行比较是更好的方法。
[0-7][0-9]
将从00匹配到79。您需要使用:
pattern = r"1722AB34(0[1-9]|[1-6][0-9]|70)"
这将从01到09
或从10到69
或70
但是获得最后四位数字,然后转换成整数并进行比较是一种更好的方法。混合数字范围的正则表达式往往非常复杂。在您的情况下,3401–3470范围内需要以下各项:
34(0[1-9]|[1-6][0-9]|70)
如果范围变长,小数位数内的混合度变大,情况只会变得更复杂
更好的方法是简单地提取数字部分,在正则表达式之外进行验证:
usn = '1722AB3471'
m = re.match('1722AB(\d{4})', usn)
if m and 3401 <= int(m.group(1)) <= 3470:
print('Valid USN')
else:
print('Invalid USN')
usn='1722AB3471'
m=re.match('1722AB(\d{4}'),usn)
if m和3401混合数范围的正则表达式往往非常复杂。在您的情况下,3401–3470范围需要以下内容:
34(0[1-9]|[1-6][0-9]|70)
如果范围变长,小数位数内的混合度变大,情况只会变得更复杂
更好的方法是简单地提取数字部分,在正则表达式之外进行验证:
usn = '1722AB3471'
m = re.match('1722AB(\d{4})', usn)
if m and 3401 <= int(m.group(1)) <= 3470:
print('Valid USN')
else:
print('Invalid USN')
usn='1722AB3471'
m=re.match('1722AB(\d{4}'),usn)
如果m和3401我倾向于简单地测试USN的最后四位数字。在您的if声明中添加一个附加术语:
import re
pattern = r"1722AB34[0-7][0-9]"
usn = "1722AB3470"
if re.search(pattern, usn) and int(usn[-4:]) in range(3401, 3472):
print("Valid USN")
else:
print("Invalid USN")
我倾向于只测试USN的最后四位数字。在您的if声明中添加一个附加术语:
import re
pattern = r"1722AB34[0-7][0-9]"
usn = "1722AB3470"
if re.search(pattern, usn) and int(usn[-4:]) in range(3401, 3472):
print("Valid USN")
else:
print("Invalid USN")
根据其他答案中给出的建议,确定USN是否有效的最佳方法是检查USN最后四位数字的范围
usn = '1722AB3469' # Given USN
last_four_digits = int(usn[-4:]) # Slice the string to get only the last four digits, then convert it to an integer
unchanged_pattern = usn[:6] # Find the pattern that doesn't change across all USNs
if (last_four_digits >= 3401 and last_four_digits <= 3470) and unchanged_pattern == "1722AB": # Check the range of the extracted number, and also the unchanged pattern
print('Valid USN')
else:
print('Invalid USN')
usn='1722AB3469'#给定usn
last_four_digits=int(usn[-4:])#对字符串进行切片以仅获取最后四位数字,然后将其转换为整数
unchanged_pattern=usn[:6]#查找在所有usn中没有更改的模式
如果(最后四位数>=3401,并且最后四位数基于其他答案中给出的建议,则确定USN是否有效的最佳方法是检查USN最后四位数的范围
usn = '1722AB3469' # Given USN
last_four_digits = int(usn[-4:]) # Slice the string to get only the last four digits, then convert it to an integer
unchanged_pattern = usn[:6] # Find the pattern that doesn't change across all USNs
if (last_four_digits >= 3401 and last_four_digits <= 3470) and unchanged_pattern == "1722AB": # Check the range of the extracted number, and also the unchanged pattern
print('Valid USN')
else:
print('Invalid USN')
usn='1722AB3469'#给定usn
last_four_digits=int(usn[-4:])#对字符串进行切片以仅获取最后四位数字,然后将其转换为整数
unchanged_pattern=usn[:6]#查找在所有usn中没有更改的模式
如果(最后四位>=3401,最后四位将最后四位转换为数字,并检查其是否在范围内?(好奇)什么是UN?“Dyz:谢谢”劳伦拉波特:美国大学是大学编号,最常用于给学生分配一个唯一ID。@ AsHY23,而不是通过帮助你的所有答案来循环接受“蜱虫”,考虑将它们作为对你有用的一种表示感谢的方式。然后回答回答你的Q。uestion:)将最后4位数字转换为数字,并检查其是否在范围内?(好奇)什么是UN?“Dyz:谢谢”劳伦拉波特:美国大学是大学编号,最常用于给学生分配一个唯一ID。@ AsHY23,而不是通过帮助你的所有答案来循环接受“蜱虫”,考虑将它们作为对你有用的一种表示感谢的方式。然后回答回答你的Q。uestion:)但这将忽略所有其他验证。我可以作为USN提供'foo-bar-baz-qux 3465'
,这将是有效的…@poke是的,我没有意识到这一点。我的错。已编辑。但这将忽略所有其他验证。我可以作为USN提供'foo-bar-baz-qux 3465'
,这将是有效的…@poke是的,我没有意识到这一点。我的错。已编辑。int(usn[-4:])范围(34013472)
nice!我从来没有想过这样使用range。int(usn[-4:])在range(34013472)
nice!我从来没有想过用这种方式使用范围。