如何使用正则表达式从字符串中删除字符副本?
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'
我想在这个例子中删除 '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'