如何用 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])
我需要处理 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])