首页 > 解决方案 > 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 只抓取在模式中找到的字符串,而不是在结果中包含模式?

标签: pythonpython-3.x

解决方案


模式 = r'用户\s\'ABCREX/(.*?)\''

list_of_usernames = re.findall(模式,输出)

这将匹配模式“用户 'ABCREX/Jerry Doe'”并提取用户名并将其添加到列表中。这有帮助吗?我也是新来的,所以让我知道是否有更多我可以帮助回答的问题。


推荐阅读