如何用 Python 中的一部分替换字符串匹配项?

How can I replace a string match with part of itself in Python?

我需要处理 Python 中的文本并将出现的任何 "[xz]" 替换为 "x",其中 "x" 是方括号中的第一个字母,并且 "z" 可以是可变长度的字符串。请注意,我不希望输出中有括号。

例如"alEhos[cr@e]sjt"应该变成"alEhoscsjt"

我认为 re.sub() 可能是一个可行的方法,但我不确定如何实施它。

这将适用于给定的示例。

import re

example = "alEhos[cr@e]sjt"
result = re.sub(r'(.*)\[(.).*\](.*)', r'', example)
print(result)

正则表达式使用三个捕获组。 </code> 和 <code> 捕获方括号前后的文本。 </code> 捕获括号内的第一个字符。</p> <p>输出:</p> <pre><code>alEhoscsjt

如果您的字符串中出现不止一次方括号,您可以使用以下方法:

example = "alEhos[cr@e]sjt[abc]xyz"
result = re.sub(r'\[(.).*?\]', r'', example)
print(result)

此版本将括号内的所有子字符串(包括括号)替换为括号内的第一个字符。 (注意使用非贪婪限定符以避免消耗第一个 [ 和最后一个 ] 之间的所有内容。)

输出:

alEhoscsjtaxyz

不是直接使用 re.sub() 方法,而是可以使用 re.findall() 方法来查找所有子字符串 (以非贪婪方式)以正确的方括号开始和结束。

然后,遍历匹配项并使用 str.replace() 方法将字符串中的每个匹配项替换为匹配项中的第二个字符:

import re

s = "alEhos[cr@e]sjt"

for m in re.findall("\[.*?\]", s):
    s = s.replace(m, m[1])

print(s)

输出:

alEhoscsjt

您可以使用 split() 方法:

str1 = "alEhos[cr@e]sjt"

lst1 = str1.split("[")
lst2 = lst1[1].split("]")

print(lst1[0]+lst2[0][0]+lst2[1])