【问题标题】:Python Regex Query SyntaxPython 正则表达式查询语法
【发布时间】:2013-05-12 08:24:53
【问题描述】:

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

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

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

当我对此进行测试时,到目前为止,我的方法是这样的:

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

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

【问题讨论】:

  • “不是一个词”不能用正则表达式来定义......或者至少不能用任何我想看的......
  • @d_w_r 您的问题与 python re 模块无关,而是与对正则表达式的一般理解有关。
  • 到目前为止你尝试过哪些正则表达式?
  • “不是单词”和“不是数字”是什么意思?
  • 我已经更新了描述,以展示我目前处理这个问题的方式。这让我意识到,可靠地捕获我正在寻找的模式比我最初想象的要难。

标签: python regex python-2.7


【解决方案1】:

这样的?

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

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

【讨论】:

  • 这很有帮助。但是,我需要它来匹配具有大写和小写字符的字符串,而不是大写或小写。你给了我一个很好的支持,我会看看我是否可以自己解决剩下的:)
【解决方案2】:

添加到 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']

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

【讨论】:

  • 我的意思是我要检查的字符串是大小写字母和数字的混合体。
  • 让它与一个轻微的 mod 一起工作。 r'(?:\s|^)(?=\S*\d)(?=\S*[az])(?=\S*[AZ])([a-zA-Z0-9\\ /]+(?=\s|$))'。感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多