-4

我正在尝试使用正则表达式来匹配文件中某种类型的字符串(加密密码)。我想申请正则表达式的规则是:

  • 包含任意顺序的大写和小写字符
  • 包含任何位置的数字
  • 不是一个词
  • 不是数字

有人可以帮助我了解如何使用“re”模块来做到这一点吗?

当我测试这个时,我的方法到目前为止是这样的:

def get_lines( file )
    pattern = r'.*[A-Z]'
    lines = [line.split() for line in file if re.match(pattern, line)]
    return lines

所以这个正则表达式只查找包含大写字母的行。这不起作用,因为有几行包含另一个完全大写的字段。所以,我需要更具体地识别那些包含我正在寻找的字符串的行。我不是开发人员,所以不经常使用正则表达式模式......

4

2 回答 2

2

像这样的东西?

import re

rx = r'(?:\s|^)(?=\S*\d)(?=\S*[a-zA-z])(\S+)'

s = "word 12345 $(#*@!) pass345word pass$(#*@!)word456 just words"

print re.findall(rx, s)
# ['pass345word', 'pass$(#*@!)word456']

解释:

(?:\s|^)         = match a space or a start of input 
(?=\S*\d)        =    (only if it is followed by some non-spaces and a digit
(?=\S*[a-zA-z])  =     and by some non-spaces and a letter)
(\S+)            = then, match a sequence of non-spaces and capture that

前瞻(?=...)用作布尔谓词以满足“至少一个字母/数字”的要求。

于 2013-05-17T08:26:33.443 回答
1

添加到 thg435 的答案,正则表达式

>>> import re
>>> rx = r'(?:\s|^)(?=\S*\d)(?=\S*[a-z])(?=\S*[A-Z])([a-zA-Z0-9]+(?=\s|$))'

应该找到你要找的东西。这给出了这样的结果:

>>> s = "Word NUM123 a8#fc0 ABcd12 0102--212 abC4"
>>> re.findall(rx, s)
['ABcd12', 'abC4']

换句话说,由至少一个数字、一个小写字母和一个大写字母组成的字母和数字字符串(由空格分隔)。

于 2013-05-17T08:40:50.220 回答