Skip to main content
 首页 » 编程设计

python正则表达式提取用户名:password or email:password in mixed delimited csv

2024年09月03日38落叶无声

我有(数千个)包含各种(数十亿)行的 csv 文件,例如:

组合.csv

example0@domain.tld:passw0rd 
ex.a.m-pl_e1@domain.tld;p@££w0r46& 
0-0-0 ex.a.m-pl_e1@domain.tld p@££w0r46& 
ex.a.m-pl_e1@domain.tld:00-00-00;p@££w0r46& <-- updated line 
00-00-00:username:password 
username:p@££w0r46& 
username p@££w0r46& 
and more... 

我正在尝试为我正在做的一些机器学习作业提取电子邮件或用户名和密码。但我似乎无法为此确定正确的正则表达式。

using re.split, re.findall 或 re.search 似乎是这里的选项,我正在尝试编译一个正则表达式,可以让我简单地打印例如:

Email: "example0@domain.tld" Password: "passw0rd" 
Email: "ex.a.m-pl_e1@domain.tld" Password: "p@££w0r46&" 
Email: "ex.a.m-pl_e1@domain.tld" Password: "p@££w0r46&" 
Email: "ex.a.m-pl_e1@domain.tld" Password: "p@££w0r46&" 
Username: "username" Password: "password" 
Username: "username" Password: "p@££w0r46&" 
Username: "username" Password: "p@££w0r46&" 

来自上面的combos.csv

我已经设法将以下内容用于电子邮件/密码组合:

re.compile(r'(?:.*[:|;])?(?P<email>[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)[:|;](?P<Password>.*)') 

但提取用户名/密码我还没有成功。我试过后视;和 : 但似乎当行被分隔两次时,我当前的正则表达式将第一列作为用户名返回,接下来的两列作为密码返回:

re.compile(r'^(?:.*[:|;])?(?P<username>[A-z0-9\.\-\_\$\#\&]+)(?!@)[:|;](?P<password>.*)') 

我怎样才能正确地做到这一点,更好的是,是否有一种解决方案可以让一个正则表达式完成所有事情?

欢迎任何帮助!

请您参考如下方法:

如果您计划从您可能使用的每一行中提取电子邮件、密码和可选的用户名数据

import re 
rx = re.compile(r'[:; ]') 
rx_email = re.compile(r'\S+@\S+\.\S+$') 
with open(your_file, "r") as f: 
    for line in f: 
        fields = rx.split(line) 
        email = '' 
        id = '' 
        for field in fields: 
            if rx_email.match(field): 
                email = field 
            elif field != fields[-1]: 
                id = field 
        password = fields[-1] 
        print("Username: '{}', email: '{}', password: '{}'".format(id, email, password)) 

参见 this Python demo .

^\S+@\S+\.\S+$ 模式匹配类似电子邮件的字段,以 1+ 个非空白字符开头,然后是 @,又是 1+ 个非空白字符,`.并以 1+ 个非空白字符结尾。

[:; ] 与 re.split 一起使用的模式用空格、; 和 : 分割。