python - 使用正则表达式获取数据
问题描述
我正在尝试使用正则表达式获取数据
logdata='146.204.224.152 - feest6811 [21/Jun/2019:15:45:24 -0700] "POST /incentivize HTTP/1.1" 302 4622\n197.109.77.178 - kertzmann3129 [21/Jun/2019:15:45:25 -0700] "DELETE /virtual/solutions/target/web+services HTTP/2.0" 203 26554'
pattern="""(?P<host>.*)( - \ )(?P<user_name>\w*)"""
for item in re.finditer(pattern,logdata,re.VERBOSE):
print(item.groupdict())
输出看起来像
{'host': '146.204.224.152 ', 'user_name': 'feest6811'}
{'host': '197.109.77.178 ', 'user_name': 'kertzmann3129'}
但我想要
{'host': '146.204.224.152', 'user_name': 'feest6811', 'time': '21/Jun/2019:15:45:24 -0700', 'request': 'POST /incentivize HTTP/1.1'}
{'host': '197.109.77.178', 'user_name': 'kertzmann3129', 'time': '21/Jun/2019:15:45:25 -0700', 'request': 'DELETE /virtual/solutions/target/web+services HTTP/2.0'}
解决方案
您可以使用
r'(?P<host>[\d.]+)\ -\ (?P<user_name>\w+)\ \[(?P<time>[^][]+)]\ "(?P<request>[^"]+)"'
查看正则表达式演示
细节
(?P<host>[\d.]+)
- 组“主机”:一位或多位数字/点\ -\
- 一个字符串(?P<user_name>\w+)
- 组“user_name”:一个或多个单词字符\ \[
- 空间+[
(?P<time>[^][]+)
]
- 组“时间”:除了和之外的一个或多个字符[
]\ "
-] "
子串(?P<request>[^"]+)
- 组“请求”:一个或多个字符,而不是一个"
"
- 一个"
字符。
推荐阅读
- delphi - 自定义控制感应加速字符
- azure - 我可以将现有的 Azure Redis 缓存从传统的经典 Azure 订阅移动到 CSP 吗?
- runtime - 什么是运行时单个循环,但它运行了 n 次?
- spring - 在 Spring SFTP 上设置首选身份验证方法
- c# - 启用 Windows 2008 R2 以接受对枚举 SslProtocols 3072 的强制转换
- ruby-on-rails - 在 rails number_field 中舍入
- go - 类型开关未检测到 float32
- javascript - Redux 商店不更新状态更改的组件视图
- java - 如何在 Kotlin 的 Main Activity 中打开多个活动?
- jquery - 在加载器后的新 href 上以加载器样式定位 src 属性图像