【问题标题】:How to delete copies of character from string using regex?如何使用正则表达式从字符串中删除字符副本?
【发布时间】:2019-11-16 17:30:12
【问题描述】:
我想在此示例中删除“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”。
谢谢你的回答。
【问题讨论】:
标签:
python
regex
regex-group
【解决方案1】:
也许,
([^i]*i)i*([^\r\n]*)
和替换,
\1\2
也许可以调查一下。
测试
import re
string = '''
123iiii
123iiiiabc
123i
'''
expression = r'([^i]*i)i*([^\r\n]*)'
print(re.sub(expression, r'\1\2', string))
输出
123i
123iabc
123i
如果您希望简化/修改/探索表达式,请在regex101.com 的右上角面板中进行说明。如果您愿意,您还可以在this link 中观看它如何与一些示例输入相匹配。
正则表达式电路
jex.im 可视化正则表达式:
【解决方案2】:
看来你需要的是:
import re
a = '123iiii'
a = re.sub(r"i+", "i", a)
print(a)
>>> 123i
【解决方案3】:
您可以通过简单地使用sub 函数将i's 序列替换为单个i 来实现您的目标
import re
a = '123iiii'
a = re.sub(r'i+', 'i', a)
print(a)
【解决方案4】:
即使您在字符串中的多个位置都有 i,以下内容也将起作用。
import re
s = '123iiii657iii'
re.sub('i+','i',s)
输出:
'123i675i'