在清单python的每个元素之间插入冒号

时间:2018-06-29 14:10:29

标签: 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',]

1 个答案:

答案 0 :(得分:0)

您需要编写与 对匹配的正则表达式:

>>> 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)的速记。如果您还需要匹配变音符号,则可能需要在正则表达式中明确列出您的语言的小写变音符号,例如:

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]

这应该适用于拉丁脚本欧洲语言。