在列表的每个元素之间插入冒号

2024-05-14 23:09:05 发布

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

[x[1] for x in matches]
x
newtest = [x2[-2:] for x2 in x]
newtest

我有一张单子

[u'asvbsMasd', u'abdhesMrty', u'ahdksC', u'ahdeO', u'ahdnL', u'ahddsS',]

现在我想让我的列表像一个冒号,在冒号之间找到小写和大写

[u'asvbs:Masd', u'abdhes:Mrty', u'ahdks:C', u'ahde:Oqqq', u'ahdn:L', u'ahdds:S',]

Tags: in列表for单子x2小写matches冒号
1条回答
网友
1楼 · 发布于 2024-05-14 23:09:05

您需要编写与<;lowercase>;<;uppercase>;对匹配的正则表达式:

>>> import re
>>> r = re.compile(r'([a-z])([A-Z])')

注意字母本身通过()标记为组。如果正则表达式将成对字母和相邻字母作为两个独立的组进行匹配,则可以只使用替换(\1\2是将匹配的组放入替换字符串的位置):

>>> r.sub(r'\1:\2', u'asvbsMasd')
u'asvbs:Masd'

然后可以使用列表理解将替换应用于列表的每个元素:

>>> l = [u'asvbsMasd', u'abdhesMrty', u'ahdksC', u'ahdeO', u'ahdnL', u'ahddsS']
>>> [r.sub(r'\1:\2', s) for s in l]
[u'asvbs:Masd', u'abdhes:Mrty', u'ahdks:C', u'ahde:O', u'ahdn:L', u'ahdds:S']

或者如果你想把它包装成一个函数:

import re

re_lowerupper = r = re.compile(r'([a-z])([A-Z])')

def add_colons(l):
    global re_lowerupper
    return [re_lowerupper.sub(r'\1:\2', s) for s in l]

print add_colons([u'asvbsMasd', u'abdhesMrty', u'ahdksC', u'ahdeO', u'ahdnL', u'ahddsS'])

当然,您可以将其简化为一个lambda,如下一个示例中所示。你知道吗

一个重要的免责声明,正如我看到您使用Unicode字符串一样:没有简单的方法可以找到任意的Unicode大小写字符。对于匹配任何数字(\d)或任何字母数字字符(\w),没有类似的速记定义。如果还需要匹配变音符号,则可能需要在regex中显式列出语言的小写和大写变音符号,如:

re_lower = ur'[a-zßàáâãäåæçèéêëìíîïðñòóôõöùúûüýþÿāăąćĉčēĕėęěğģĥĩīĭįĵķļľŀłņňŋōŏőœŕŗřśŝşţťũūŭůűųŵŷźžǎǐǒǔǖǘǚǜǩǫǵǹȟȧȩȯȳəḅḋḍḑḟḡḣḥḧḩḱḳṃṕṗṙṛṡṣṫṭṽẁẃẅẇẉẍẏẑẓẗẘẙạẹẽịọụỳỵỹ]'
re_upper = ur'[A-ZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝÞĀĂĄĆĈČĒĔĖĘĚĞĢĤĨĪĬĮİĴĶĻĽĿŁŅŇŊŌŎŐŒŔŖŘŚŜŞŢŤŨŪŬŮŰŲŴŶŸŹŽƏǍǏǑǓǕǗǙǛǨǪǴǸȞȦȨȮȲḄḊḌḐḞḠḢḤḦḨḰḲṂṔṖṘṚṠṢṪṬṼẀẂẄẆẈẌẎẐẒẠẸẼỊỌỤỲỴỸ]'
re_lowerupper = re.compile('(%s)(%s)' % (re_lower, re_upper))
add_colons = lambda l: [re_lowerupper.sub(r'\1:\2', s) for s in l]

这应该可以为拉丁语和欧洲语言做好准备。你知道吗

相关问题 更多 >

    热门问题