2024-04-26 05:06:06 发布
网友
我使用此正则表达式测试给定字符串是否至少出现以下一种情况:
r'[a-z]+[A-Z]+[0-9]+'
如果字符串以[a-z]开头,我的if语句只返回true。你知道吗
[a-z]
if
true
如果我理解正确,您需要测试一个字符串是否至少包含一个小写、大写和数字字符(并且只包含这些类型的字符)。你知道吗
我认为解决这个问题的唯一简单方法(对于simple的某些定义)是使用lookahead来查找三类字符中的两类,然后使用normal模式检查第三类字符。你知道吗
re.match(r'(?=[a-zA-Z]*\d)(?=[a-z\d]*[A-Z])[A-Z\d]*[a-z][a-zA-Z\d]*', text)
模式说明:
(?=[a-zA-Z]*\d)
(?=[a-z\d]*[A-Z])
[A-Z\d]*[a-z][a-zA-Z\d]*
如果您不想将匹配的字符串仅限于字母和数字(但仍然需要至少一个小写、大写和数字,以及其他类型的字符),可以用.替换模式中大多数更通用的字符类(并获得一个更简单的模式作为奖励):r'(?=.*\d)(?=.*[A-Z]).*[a-z].*'
.
r'(?=.*\d)(?=.*[A-Z]).*[a-z].*'
如果我理解正确,您需要测试一个字符串是否至少包含一个小写、大写和数字字符(并且只包含这些类型的字符)。你知道吗
我认为解决这个问题的唯一简单方法(对于simple的某些定义)是使用lookahead来查找三类字符中的两类,然后使用normal模式检查第三类字符。你知道吗
模式说明:
(?=[a-zA-Z]*\d)
:对任意数量的字母进行的前向查找,后跟一个数字。你知道吗(?=[a-z\d]*[A-Z])
:对任意数量的小写字母或数字的前向查找,后跟一个大写字母。你知道吗[A-Z\d]*[a-z][a-zA-Z\d]*
:任意数量的大写或数字字符的规则模式,后跟小写字母,然后是任意数量的大写、小写或数字字符。你知道吗如果您不想将匹配的字符串仅限于字母和数字(但仍然需要至少一个小写、大写和数字,以及其他类型的字符),可以用
.
替换模式中大多数更通用的字符类(并获得一个更简单的模式作为奖励):r'(?=.*\d)(?=.*[A-Z]).*[a-z].*'
相关问题 更多 >
编程相关推荐