如何使用正则表达式从字符串中删除字符副本?

How to delete copies of character from string using regex?

我想在这个例子中删除 'i' 的副本,尝试使用组但它不起作用。我哪里做错了?

import re

a = '123iiii'
b = re.match('.*i(i+)', a)
print(b.group(1))
>>> i
a = re.sub(b.group(1), '', a)
print(a)
>>> 123

期望的结果是“123i”。
谢谢你的回答。

您只需使用 sub 函数将一系列 i's 替换为单个 i

即可实现您的目标
import re

a = '123iiii'
a = re.sub(r'i+', 'i', a)
print(a)

看来你需要的是:

import re

a = '123iiii'
a = re.sub(r"i+", "i", a)

print(a)
>>> 123i

也许,

([^i]*i)i*([^\r\n]*)

并替换


可能可以调查一下。

测试

import re

string = '''
123iiii
123iiiiabc
123i
'''

expression = r'([^i]*i)i*([^\r\n]*)'

print(re.sub(expression, r'', string))

输出

123i
123iabc
123i

如果您希望 simplify/modify/explore 表达式,regex101.com. If you'd like, you can also watch in this link 的右上面板已对其进行说明,它将如何匹配一些样本输入。


正则表达式电路

jex.im 可视化正则表达式:

即使您在字符串中的多个位置有 i,以下内容仍然有效。

import re

s = '123iiii657iii'
re.sub('i+','i',s)

输出:

'123i675i'