如何根据索引替换子字符串?

nil*_*rty 2 python regex string awk sed

我有一个字符串(一个日志行,实际上,包含敏感信息(info)),我想根据字符串中子字符串的索引替换其中的子字符串.子字符串中可以包含多个单词,但根据要求,它必须被视为单个子字符串.

细节:

所以,这是我的字符串:

[2016-04-25 03:48:34] 123737 error 150531221446 2000 Master dmart 843212 "Tough times"
Run Code Online (Sandbox Code Playgroud)

在这里,我们需要用一些字符串代替"Tough times"这个词,比如"人类种族".以下是必须处理字符串的方式:

[2016-04-25 03:48:34] - >索引0

123737 - >索引1

错误 - >索引2(...等等)

"艰难时期" - >索引8

现在,python程序(我正在研究),将不会有任何关于子字符串的线索,即"艰难时期",它将简单地提供数字'9'(单词的索引,如上所示) ,程序将用结果字符串替换第9个索引中的任何子字符串.类似地,如果程序提供了数字'7',它将用结果字符串替换第7个索引中的任何子字符串.

现在,我尝试过使用正则表达式,sed,awk等,但找不到合适的答案.我找到的最近的解决方案是这个正则表达式.

但它不符合我的要求.

现在,我怀疑我的要求是否荒谬.

Joh*_*024 5

回答修改后的问题

让我们从字符串开始:

>>> orig = '[2016-04-25 03:48:34] 123737 error 150531221446 2000 Master dmart 843212 "Tough times"'
Run Code Online (Sandbox Code Playgroud)

接下来,让我们将字符串分成子串:

>>> import re
>>> s = re.findall(r'(\[[^]]*\]|\w+|"[^"]*")', orig)
>>> s
['[2016-04-25 03:48:34]', '123737', 'error', '150531221446', '2000', 'Master', 'dmart', '843212', '"Tough times"']
Run Code Online (Sandbox Code Playgroud)

现在,让我们更改第九个子字符串并重新组合字符串:

>>> s[8] = '"Human race"'
>>> ' '.join(s)
'[2016-04-25 03:48:34] 123737 error 150531221446 2000 Master dmart 843212 "Human race"'
Run Code Online (Sandbox Code Playgroud)

更多关于正则表达式

正则表达式允许子字符串匹配以下三种模式中的任何一种:

  1. \[[^]]*\]:以...开头[和结尾的子字符串,]除了之外有任何字符].

  2. \w+:任何一系列"单词"字符.

  3. "[^"]*":双引号字符串.

回答原始问题

此方法在字符串中查找匹配的分隔符.分隔符可以是(a)[],或(b)(),或(c)"".分隔符可以按任何顺序排列.找到匹配的分隔符后,字符串被分成子字符串,然后我们可以更改和重新组合.

为了演示,让我们从这个字符串开始:

>>> orig = '[2016-04-25 03:48:34] (info) (info) (info) (info) (info) (info) (info) "Tough times"'
Run Code Online (Sandbox Code Playgroud)

接下来,让我们将其拆分为具有匹配分隔符的组:

>>> import re
>>> s = re.findall(r'(\[[^]]*\]|\([^)]*\)|"[^"]*")', orig)
>>> s
['[2016-04-25 03:48:34]', '(info)', '(info)', '(info)', '(info)', '(info)', '(info)', '(info)', '"Tough times"']
Run Code Online (Sandbox Code Playgroud)

现在,让我们改变第九个字符串并重新组合:

>>> s[8]='"Human Race"'
>>> ' '.join(s)
'[2016-04-25 03:48:34] (info) (info) (info) (info) (info) (info) (info) "Human Race"'
Run Code Online (Sandbox Code Playgroud)