正则表达式条件使用检索功能

2021-08-02 16:05:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用此正则表达式测试给定字符串是否至少出现以下一种情况:

r'[a-z]+[A-Z]+[0-9]+'

如果字符串以[a-z]开头,我的if语句只返回true。你知道吗

1条回答
网友
1楼 ·

如果我理解正确,您需要测试一个字符串是否至少包含一个小写、大写和数字字符(并且只包含这些类型的字符)。你知道吗

我认为解决这个问题的唯一简单方法(对于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)

模式说明:

  1. (?=[a-zA-Z]*\d):对任意数量的字母进行的前向查找,后跟一个数字。你知道吗
  2. (?=[a-z\d]*[A-Z]):对任意数量的小写字母或数字的前向查找,后跟一个大写字母。你知道吗
  3. [A-Z\d]*[a-z][a-zA-Z\d]*:任意数量的大写或数字字符的规则模式,后跟小写字母,然后是任意数量的大写、小写或数字字符。你知道吗

如果您不想将匹配的字符串仅限于字母和数字(但仍然需要至少一个小写、大写和数字,以及其他类型的字符),可以用.替换模式中大多数更通用的字符类(并获得一个更简单的模式作为奖励):r'(?=.*\d)(?=.*[A-Z]).*[a-z].*'

相关问题