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

标签 python regex csv

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

combos.csv

<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a2c7dac3cfd2cec792e2c6cdcfc3cbcc8cd6cec6" rel="noreferrer noopener nofollow">[email protected]</a>:passw0rd
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="97f2efb9f6b9fabae7fbc8f2a6d7f3f8faf6fef9b9e3fbf3" rel="noreferrer noopener nofollow">[email protected]</a>;p@££w0r46&
0-0-0 <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="36534e1857185b1b465a6953077652595b575f5818425a52" rel="noreferrer noopener nofollow">[email protected]</a> p@££w0r46&
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b0d5c89ed19edd9dc0dcefd581f0d4dfddd1d9de9ec4dcd4" rel="noreferrer noopener nofollow">[email protected]</a>:00-00-00;p@££w0r46& <-- updated line
00-00-00:username:password
username:p@££w0r46&
username p@££w0r46&
and more...

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

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

Email: "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="711409101c011d144131151e1c10181f5f051d15" rel="noreferrer noopener nofollow">[email protected]</a>" Password: "passw0rd"
Email: "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="abced385ca85c686dbc7f4ce9aebcfc4c6cac2c585dfc7cf" rel="noreferrer noopener nofollow">[email protected]</a>" Password: "p@££w0r46&"
Email: "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="482d3066296625653824172d79082c2725292126663c242c" rel="noreferrer noopener nofollow">[email protected]</a>" Password: "p@££w0r46&"
Email: "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fa9f82d49bd497d78a96a59fcbba9e95979b9394d48e969e" rel="noreferrer noopener nofollow">[email protected]</a>" 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 一起使用,使用空格、;: 进行分割。

关于python正则表达式提取用户名:password or email:password in mixed delimited csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54516613/

相关文章:

html - 文本空格和制表符分隔表以分号分隔

python - Pandas loc 有条件的替代品

regex - 正则表达式中的空格

csv - JMeter:使用 CSV 数据将参数传递到 HTTP GET 请求查询字符串

java - 自定义输入过滤器接受正则表达式中的数值

python - 英国手机号码的正则表达式 - Python

c# - 如何在 Dynamics CRM 中调用 create 之前删除重复项?

python - 将列表的值插入到mysql Python的不同列中

python - 学习变量的预期 tensorflow 模型大小

python - 将齐次坐标 (x0=1) 添加到 numpy 中的图像