使用正则表达式删除特定字符之间的字符

2024-09-28 19:01:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试更改字符串,以便删除*字符之间的任何内容

例如,字符串[xyz] - * remove this. . * Abcd123应该变成[xyz] - Abcd123

另一个例子: abc*def*ghi应该变成abcghi

这是我的代码,我试图保留任何不是*的字符,但我认为我写得不对:

str = '[xyz] - * remove this. . *  Abcd123'

regex = re.compile('^(\*.*\*)+')
mo = regex.findall(str)

Tags: 字符串代码内容defthis字符remove例子
3条回答

签出^{}

import re

str = '[xyz] - * remove this. . *  Abcd123'

res = re.sub(r"\*[^\*]*\*", '', str)

根据需要,您可能需要GM标志

如果您多次出现*....*,这将解决这个问题。它也将确保不意外地删除太多:例如,如果您有^ {CD5}},那么只考虑连续的^ {< CD6> }来生成对,而不只是看第一个和最后一个^ {CD6}}。p>

您可以不使用正则表达式来完成它。试试这个:

str = 'abc*def*ghi'
replace = str[:(str.index('*'))] + str[(str.rfind('*') + 1):]
print(replace)

.index()->;查找字符串中第一个出现的字符
.rfind()->;查找字符串中最后出现的字符

第一种方法

import re

s_1 = '[xyz] - * remove this. . *  Abcd123'
s_2 = 'abc*def*ghi'

reg = re.compile(r'\*.*\*')

print(reg.sub('', s_1))
print(reg.sub('', s_2))

这个正则表达式是如何工作的?

这个\*选择星号'*'。然后我们使用.*选择两个星号'*'中的零个或多个

第二种方法

s_1 = '[xyz] - * remove this. . *  Abcd123'
s_2 = 'abc*def*ghi'

print(''.join(s_1.split('*')[::2]))
print(''.join(s_2.split('*')[::2]))

这里我们基本上是在'*'上拆分代码,然后删除星号中的部分

相关问题 更多 >