我想从一些文本中提取Key=Value对(见下文)。我尝试使用正则表达式,但是key=value对的格式不一致。例如,许多值都包含在引号中,有些值则不包含在引号中
这是一个几乎有效的正则表达式,但是有几个异常值
(\w*)=([\w,\",:,\-,(,\.,\+,\)]*)
消息符合警报条件 date=2020-08-20 time=00:33:57 devname=fgt3hd399990624 devid=fgt3hd399990624 logid=“0100032003”type=“event”subtype=“system”level=“information”vd=“root”eventtime=1597847637407862934 tz=“+1000”logdesc=“Admin注销成功”sn=“15999994”user=“Admin”ui=“https(10.198.199.105)”method=“https”srcip=10.198.199.105 dstip=192.168.23.254 action=“logout”status=“success”duration=4843 reason=“timeout”msg=“管理员管理员在https上超时(10.198.199.105)” 管理员IT管理员Ph:
你有几种方法可以做到这一点。首先,因为你说你的键值对被嵌入到一个更大的电子邮件中,所以你需要提取它们。您可以使用此正则表达式执行此操作,它检查以单词和等号开头的行:
然后你需要创建你的字典
选项1:最简单的
使用以下正则表达式查找:
Regex demo
选项2:典型拆分
遵循此问题的典型方法:将各种键值组合拆分为一个列表,然后将每个组合拆分为单独的键值。但是,由于键值对是用空格分隔的,而不是用分号、符号或类似的符号分隔的,而且有些值中有空格,所以我们不能简单地用空格分隔。这意味着我们需要使用正则表达式前瞻,以使其正常工作:
选项3:无正则表达式
如果出于任何原因不想完全使用正则表达式,可以使用以下方法,即在等号上拆分,然后将键和值重新组合到创建字典的适当排列中:
上面的代码假设您的词典将至少包含两个条目
Demo for all 3 options
在正则表达式中添加OR(
|
)怎么样与您提供的字符串匹配。
注
\"[\w\s\+()\.]*\"
匹配""
中包含的所有值[\w\-\:\.]*
与没有相关问题 更多 >
编程相关推荐