在Python中如何用一个下划线替换所有连续的大写字母

2024-06-28 20:17:26 发布

您现在位置:Python中文网/ 问答频道 /正文

例如

“jhdkksdksjdsggg”变为“\u ksd_s”

有没有办法用一个下划线来替换大写的簇?在


Tags: 大写办法ksdjhdkksdksjdsggg
3条回答

强制性非正则表达式解决方案:

>>> from itertools import groupby
>>> s = "JHDKFksdKSJDsGGGG"
>>> ''.join('_' if k else ''.join(g) for k,g in groupby(s, str.isupper))
'_ksd_s_'

groupby如果iterable的连续元素具有相同的值,则将它们组合在一起,在这种情况下,由keyfunctionstr.isupper指定。低,groupby产生

^{pr2}$

然后我们相应地更换或离开。在

>>> import re
>>> re.sub("[A-Z]+", "_", "JHDKFksdKSJDsGGGG")
'_ksd_s_'

[A-Z]表示匹配A-Z范围内的任何字符。
+表示匹配前面的一个或多个表达式。在

您可以使用re模块:

import re
s = 'JHDKFksdKSJDsGGGG'
print re.sub('[A-Z]+','_',s)

基本上,它所做的是用下划线(第二个参数)替换大写的集群([A-Z]+部分)。在

[A-Z]匹配从A到{}的任何大写字符,+表示您希望至少有一个字符匹配(您不想用下划线替换空字符串)。在

因此,[A-Z]+一起匹配一组大写字母。在

所以re.sub所做的是它接受3个参数(pattern、replacement和string)。它遍历字符串,寻找与模式匹配的内容(在本例中:看起来像一组大写字符),并用替换字符串替换这些组。在

相关问题 更多 >