Python 将单个/多个字符更改为另一个单个字符

Python 将单个/多个字符更改为另一个单个字符,python,string,replace,character,Python,String,Replace,Character,例如,我有这样一个字符串: my_string = 'a hello aaaaa hi aaaaaaa bye bbb' 我想将'a'或'a's更改为'b'。所以我想要的输出是: changed_string = 'b hello b hi b bye bbb' 我尝试使用replace,然后将多个'b's转换为单个'b',但是它会影响字符串中原来的多个'b's 我不想要前n个字符那样的答案 有什么建议吗?使用正则表达式 >>> import re >>>

例如,我有这样一个字符串:

my_string = 'a hello aaaaa hi aaaaaaa bye bbb'
我想将
'a'
'a'
s更改为
'b'
。所以我想要的输出是:

changed_string = 'b hello b hi b bye bbb'
我尝试使用replace,然后将多个
'b'
s转换为单个
'b'
,但是它会影响字符串中原来的多个
'b'
s

我不想要前n个字符那样的答案


有什么建议吗?

使用正则表达式

>>> import re
>>> my_string = 'a hello aaaaa hi aaaaaaa bye bbb'
>>> re.sub(r'a+', 'b', my_string)
'b hello b hi b bye bbb'
根据您的工具,它可以是一行或2-3行代码

充满活力

s/a+/b/g
--


哦,没注意到是python。参见jamylak的答案。

使用正则表达式

根据您的工具,它可以是一行或2-3行代码

充满活力

s/a+/b/g
--


哦,没注意到是python。参见jamylak的答案。

不使用正则表达式,您可以这样做,尽管我更愿意使用正则表达式,因为它在这种情况下更清晰、更快

>>> from itertools import groupby
>>> my_string = 'a hello aaaaa hi aaaaaaa bye bbb'
>>> ''.join(''.join(g) if k != 'a' else 'b' for k, g in groupby(my_string))
'b hello b hi b bye bbb'

不使用regex,您可以做到这一点,尽管我更愿意使用regex,因为它在这种情况下更清晰、更快

>>> from itertools import groupby
>>> my_string = 'a hello aaaaa hi aaaaaaa bye bbb'
>>> ''.join(''.join(g) if k != 'a' else 'b' for k, g in groupby(my_string))
'b hello b hi b bye bbb'
请注意,虽然这适用于您的示例,但它不适用于重复字符是单词一部分的字符串,例如
'aaaaa z'
-它将保留这些单词不变,这可能是可取的,也可能是不可取的


请注意,虽然这适用于您的示例,但它不适用于重复字符是单词一部分的字符串,例如
'aaaaa z'
-它将保留这些单词不变,这可能是可取的,也可能不是可取的…

此处无需列表理解,请删除
[
]
,使其成为生成器。编辑:nvm我不认为它会那么低效,但正则表达式肯定很快。这里不需要列表理解,删除
[
]
,使其成为生成器。编辑:nvm我不认为它会有那么低的效率,但正则表达式肯定会很快再次询问您,但当我将句点(.)转换为其他内容时,我会遇到问题。(例如,b)如果我使用re.sub(r'.+',b',我的_字符串),结果是b。。。我能做些什么呢???@H.Choi这是因为
是一个特殊的字符,默认情况下,除了换行符之外,它可以替换任何字符。用反斜杠将其转义,如
\.+
。您可以在此处看到所有特殊字符:。如果我的回答对您有帮助,也请接受我的回答:D很抱歉再问您一次,但我在将句点(.)转换为其他内容时遇到问题。(例如,b)如果我使用re.sub(r'.+',b',我的_字符串),结果是b。。。我能做些什么呢???@H.Choi这是因为
是一个特殊的字符,默认情况下,除了换行符之外,它可以替换任何字符。用反斜杠将其转义,如
\.+
。您可以在此处看到所有特殊字符:。如果我的回答对你有帮助,也请接受我的回答:D