python - 查找字符串中三个 ASCII 系列的重复出现

标签 python string character ascii recurring

我正在尝试为密码生成器创建一个“检查”系统,该系统将检查生成的密码中是否连续找到三个相同类型的字符系列,即

如果密码是

y8kpBD8zcZLKRSh1j7vwCMDQ5orR8VEP

它将找到“ZLK”等

我首先想到 lowercase_repeat = re.compile("[a-z]{3}") 例如会找到三个小写重复,但我似乎无法理解它到底是如何工作的。

密码生成器如下:

import random
import re
generator = random.SystemRandom()
password_characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789!@#$%^&*()'
password = ''.join(generator.choice(password_characters) for _ in range(32))
print password

最佳答案

如果你只是想检查特定的字符集;例如:全部大写、全部小写、数字和非数字 - 您可以为每个集合创建一个非捕获组。例如:

import re

pattern  = '(?:[a-z]{3}|[A-Z]{3}|\d{3}|[\x20-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]{3})'
password = 'y8kpBD8zcZLKRSh1j7vwCMDQ5orR8VEP!'
matches  =  re.search(pattern, password)

如果没有匹配,变量matches返回None,表明密码通过。

模式[\x20-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]是一种(可能相当粗糙)捕获一组所有非alnum ascii 字符(十六进制代码)。它代表以下集合:

[space] ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~

我把它从一个旧项目中拉出来,所以 YMMV。我确信可能有一种更简洁的方式来表达它 - 事实上,您可能更喜欢显式指定一个集合;例如:[!?#]

快速健全性检查:

import re

def check_password(password):
    pattern = '(?:[a-z]{3}|[A-Z]{3}|\d{3}|[\x20-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]{3})'
    return re.search(pattern, password)

passwords = ['a', 'abc', 'ABC', 'aBc', '1bc', '123']

for password in passwords:
    if check_password(password):
        print 'password failed: ', password
    else:
        print 'password passed: ', password

产量:

password passed:  a
password failed:  abc
password failed:  ABC
password passed:  aBc
password passed:  1bc
password failed:  123

希望这有帮助:)

关于python - 查找字符串中三个 ASCII 系列的重复出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32165881/

相关文章:

python - Python 中对象是如何排序的

python - 删除python中所有.csv文件内容

javascript - 将字符串添加到 href ="javascript"中

string - Swift 获取两个字符串中的不同字符

Java JTextPane 或 JTextArea 在换行之前设置每行字符

python - 如何遍历列表,在 Python 中重复每个元素

python - 从 vim 中测试单个函数

java - 清理包含二进制垃圾的输入字符串以生成 ASCII 可打印字符串

java - 在java中提取已知模式的子串

java - HttpURLConnection 输出流汉字