gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:47:07 28 4
gpt4 key购买 nike

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

详细信息:

所以,这是我的字符串:

[2016-04-25 03:48:34] 123737 error 150531221446 2000 Master dmart 843212 "Tough times"

在这里我们需要用一些字符串替换“艰难时期”这个词,比如“人类”。下面是必须处理字符串的方式:

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

123737 -> index 1

error -> index 2 (... and so on)

"Tough times" -> index 8

现在,python 程序(我正在处理)不会有任何关于子字符串的线索,即“艰难时期”,它会简单地提供数字“9”(单词的索引,如如上所示),程序将用结果字符串替换第 9 个索引中的任何子字符串。同样,如果程序提供了数字“7”,它将用结果字符串替换第 7 个索引中的任何子字符串。

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

但是不符合我的要求。

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

最佳答案

修改问题的答案

让我们从字符串开始:

>>> 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"'

关于正则表达式的更多信息

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

  1. \[[^]]*\]:以[开始,以]结束的子字符串之间的字符,] 除外。

  2. \w+:任意一系列“单词”字符。

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

原始问题的答案

此方法在字符串中查找匹配的分隔符。分隔符可以是 (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"'

关于python - 如何根据索引替换子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36997901/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com