python - Python - 使用 RegEx 仅提取模式之间的字符串
问题描述
希望有人能指出我正确的方向。
我正在尝试解析日志文件,以了解每天有多少用户登录系统。
日志文件以下面列出的模式生成。
"<"Commit ts="20141001114139" client="ABCREX/John Doe"> "8764","ABCREX/John Doe","00.000.0.000","用户'ABCREX/John Doe'从地址'00.000成功登录.0.000'。” "<"/Commit> "<"Commit ts="20141001114139" client="ABCREX/John Doe"> "8764","ABCREX/Jerry Doe","00.000.0.000","User 'ABCREX/Jerry Doe' 成功从地址'00.000.0.000'登录。” "<"/Commit> "<"Commit ts="20141001114139" client="ABCREX/John Doe"> "8764","ABCREX/Jane Doe","00.000.0.000","User 'ABCREX/Jane Doe' 成功从地址'00.000.0.000'登录。” "
我试图从上面的行中捕获用户名并加载到数据库中。
所以我只对价值观感兴趣
约翰·多伊、杰瑞·多伊、简·多伊
但是当我使用 REGEX 进行模式匹配时,它会返回以下内容
client="ABCREX/John Doe">
然后使用我正在使用的代码,我必须应用多个替换来删除“客户端”、“ABCREX/”、“>”...等
我目前有正在运行的代码,但我觉得它的效率非常低且耗费资源。我正在对标签执行拆分,然后逐行解析阅读。
'''提取用户登录名''' UserLoginName = str(re.search('client=(.*)>',items).group()).replace('ABCREX/', '').replace( 'client="','').replace('">', '')
打印(用户登录名)
有什么办法可以告诉 REGEX 只抓取在模式中找到的字符串,而不是在结果中包含模式?
解决方案
模式 = r'用户\s\'ABCREX/(.*?)\''
list_of_usernames = re.findall(模式,输出)
这将匹配模式“用户 'ABCREX/Jerry Doe'”并提取用户名并将其添加到列表中。这有帮助吗?我也是新来的,所以让我知道是否有更多我可以帮助回答的问题。
推荐阅读
- excel - export-csv powershell后格式化excel文件
- javascript - Node JS - 通过它们的键合并对象,其中键是未知的
- python - 如何多次返回缓存的 PyObject* 值而不发生内存泄漏或双/三释放?
- angular - 无法在 Input Typeahead 中显示简单的字符串
- python - 如何让用户在预定义的点暂停 python 脚本?
- google-cloud-platform - 使用 SchemaAndRecord 类从表中读取 BigQuery 数值数据类型
- php - 如何在 Chrome 上修复 ERR_EMPTY_RESPONSE?(PHP卷曲)
- xml - SAXParseException:未能读取架构文档“http://www.springframework.org/schema/context/spring-context.xsd”
- php - 仅当两个 CSV 文件中都存在 CSV 数据时才打印出来
- java - 有没有办法在没有 BitmapFonts 的情况下在 libgdx 中绘制字符串?