加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python:将一个characater的多次出现替换为一次,但单次出现则为n

发布时间:2020-12-20 12:15:05 所属栏目:Python 来源:网络整理
导读:我有一个字符串: a = '0202201131181' 我希望在if中存在的所有多次出现的1替换为1,但如果只找到一次’1′,则用空字符串”替换它. 我的最终目标是获得: a = '0202201318' 在这里,’8’字符后面的’1’只出现一次,所以它被空字符串替换,但字符’3’之前的’1
我有一个字符串:

a = '0202201131181'

我希望在if中存在的所有多次出现的1替换为1,但如果只找到一次’1′,则用空字符串”替换它.

我的最终目标是获得:

a = '0202201318'

在这里,’8’字符后面的’1’只出现一次,所以它被空字符串替换,但字符’3’之前的’11’和字符’3’之后的’11’被’1’取代.

这是我尝试过的if-else代码块,部分正确:

if '11' in a:
    a = a.replace("11","1")
else:
    a = a.replace("1","")

但它输出’02022013181′,这是不正确的.这该怎么做?

解决方法

正则表达式可能是最好的选择:

import re

a = '020220111311811001001001001'

a = re.sub(r'1{2,}','1',re.sub(r'(?<!1)1(?=[^1]|$)','',a))
print(a)

首先分出单个1,然后分出多次出现的1.我为了测试目的添加了一些更多的字符,输出是

0202201318100000000

如果你不喜欢单线引起的混乱:

a = re.sub(r'(?<!1)1(?=[^1]|$)',a)
a = re.sub(r'1{2,a)

(?<!1)1(?= [^ 1] | $)的解释: >(?<!1):确保之前的字符不是1.> 1:字面上匹配1.>(?= [^ 1] | $):确保前面的字符是a)不是1,或b)是字符串的结尾.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读