[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',]
答案 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]
这应该适用于拉丁脚本欧洲语言。