-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

先読み(?=...)は、「少なくとも 1 つの文字/数字」の要件を満たすブール述語として機能します。

于 2013-05-17T08:26:33.443 に答える