【发布时间】:2016-08-28 03:08:23
【问题描述】:
我有一个字符串(实际上是一个日志行,包含敏感信息 (info) ),我想根据字符串中子字符串的索引替换其中的子字符串。子字符串中可以有多个单词,但根据要求必须将其视为单个子字符串。
详情:
所以,这是我的字符串:
[2016-04-25 03:48:34] 123737 error 150531221446 2000 Master dmart 843212 "Tough times"
这里我们需要用一些字符串替换“艰难时期”这个词,比如“人类”。下面是必须处理字符串的方式:
[2016-04-25 03:48:34] -> 索引 0
123737 -> 索引 1
错误 -> 索引 2(...等等)
“艰难时期”-> 索引 8
现在,python 程序(我正在研究)不会对子字符串有任何线索,即“艰难时期”,它只会提供数字“9”(单词的索引,如如上所示),程序将用结果字符串替换第 9 个索引中的任何子字符串。同样,如果程序提供了数字“7”,它将用结果字符串替换第 7 个索引中的任何子字符串。
现在,我尝试使用正则表达式、sed、awk 等,但找不到任何合适的答案。我找到的最接近的解决方案是regex。
但它不符合我的要求。
现在,我怀疑我的要求是否荒谬。
【问题讨论】:
-
所以字符串的每个“子字符串”都用圆括号或方括号括起来,但可能包含多个单词?
-
(信息)的格式是什么?有没有一种我们可以利用的模式来索引事物?每个字段之间的分隔符?
-
所以为了澄清,通过索引,您实际上并不是指 python 字符串索引。如果是这样,那么您是在问我们如何按照您概述的方式对字符串进行分组、拆分和计数。如果不知道
(info)的样子,这将是一件很难回答的事情。你最好的选择是想出一个正则表达式来分隔所有单独的“子字符串”,并使用 re.split。 -
您可以使用 (?<=]|)|\") (?=(|[|\") 进行拆分,但它不会关心平衡组或在三个选项上使用简单捕获
-
@ByteCommander :不,除了日期时间部分 [2016-04-25 03:48:34] 之外,子字符串不被圆括号或方括号括起来,我使用了模式“(信息)”使人们了解日志行的结构。无论如何,编辑我的问题以便更好地理解。
标签: python regex string awk sed