我有一个字符串(实际上是一条日志行,其中包含敏感信息(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等,但是找不到任何合适的答案。我找到的最接近的解决方案是此正则表达式。
但这不符合我的要求。
现在,我怀疑我的要求是否荒谬。
让我们从字符串开始:
>>> orig = '[2016-04-25 03:48:34] 123737 error 150531221446 2000 Master dmart 843212 "Tough times"'
接下来,让我们将字符串分成子字符串:
>>> import re
>>> s = re.findall(r'(\[[^]]*\]|\w+|"[^"]*")', orig)
>>> s
['[2016-04-25 03:48:34]', '123737', 'error', '150531221446', '2000', 'Master', 'dmart', '843212', '"Tough times"']
现在,让我们更改第九个子字符串并重新组装该字符串:
>>> s[8] = '"Human race"'
>>> ' '.join(s)
'[2016-04-25 03:48:34] 123737 error 150531221446 2000 Master dmart 843212 "Human race"'
正则表达式允许子字符串匹配以下三种模式中的任何一种:
\[[^]]*\]
:子字符串,以开头[
和结尾,]
并且之间有任何字符,但除外]
。
\w+
:任何系列的“单词”字符。
"[^"]*"
:双引号字符串。
这种方法在字符串中寻找匹配的定界符。分隔符可以是(a)[
和]
,或(b)(
和)
,或(c)"
和"
。分隔符可以按任何顺序排列。一旦找到匹配的定界符,该字符串将被分为多个子字符串,然后我们可以对其进行更改和重新组合。
为了演示,让我们从以下字符串开始:
>>> orig = '[2016-04-25 03:48:34] (info) (info) (info) (info) (info) (info) (info) "Tough times"'
接下来,让我们使用匹配的分隔符将其分成几组:
>>> import re
>>> s = re.findall(r'(\[[^]]*\]|\([^)]*\)|"[^"]*")', orig)
>>> s
['[2016-04-25 03:48:34]', '(info)', '(info)', '(info)', '(info)', '(info)', '(info)', '(info)', '"Tough times"']
现在,让我们更改第九个字符串并重新组装:
>>> s[8]='"Human Race"'
>>> ' '.join(s)
'[2016-04-25 03:48:34] (info) (info) (info) (info) (info) (info) (info) "Human Race"'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句