我正在尝试使用正则表达式来检查字符串str是否至少包含两个数字,并且正好包含以下任意符号中的两个:“!”、“@”、“#”、“美元”、“%”和“&;','*'
似乎正在发生的是,我只在它们连续出现而不是全部出现时才匹配。我该如何解决这个问题
str = 'a1b2c$3d#4e!f@ghi0'
sym = '[!@#$%&*]{2}'
num = '[0-9]{2,}'
for char in str:
if re.search(sym, str):
if re.search(num, str):
print('match!')
else:
print('no matches!')
如果您想使用2种模式,则不必循环检查每个字符。在
sym
中,您可以检查字符串是否正好包含列出的两个字符在
num
中,您至少可以匹配两位数字您还可以将单个模式与re.match一起使用
解释
^
字符串的开头(?=[^\d\r\n]*\d[^\d\r\n]*\d)
正向前瞻,断言2个数字[^!@#$%&*\r\n]*[!@#$%&*][^!@#$%&*\r\n]*[!@#$%&*][^!@#$%&*\r\n]*
精确匹配列出的任何字符中的2个\Z
字符串的结尾Regex demoPython demo
在不使用正则表达式的情况下,一个选项是计算数字和特殊字符的出现次数:
Python demo
相关问题 更多 >
编程相关推荐