例如,我有一个这样的字符串:
my_string = 'a hello aaaaa hi aaaaaaa bye bbb'
我想将'a'
or更改'a'
为'b'
。所以我想要的输出是:
changed_string = 'b hello b hi b bye bbb'
我尝试使用 replace ,然后将多个'b'
s 设置为 single '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 行代码。
用 vim
s/a+/b/g
--
哦,没有注意到它是python。见贾米拉克的回答。
不使用正则表达式你可以做到这一点,虽然我宁愿使用正则表达式,因为在这种情况下它更清晰、更快。
>>> 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'
>>> mystring = 'a hello aaaaa hi aaaaaaa bye bbb'
>>> ' '.join('b' if set(i)==set(['a']) else i for i in mystring.split())
'b hello b hi b bye bbb'
请注意,虽然这适用于您的示例,但它不适用于重复字符是单词一部分的字符串,例如'aaaaaz'
- 它会使这些单词保持不变,这可能是可取的,也可能不是......