使用python

时间:2015-08-14 07:39:45

标签: python regex

Data.txt包含大写和小写的单词。

我需要lower case them all except for the upper-cased characters that appear in braces位于一个单词之后,该单词可以以小写或大写结尾,但在第一个大括号之前没有空格。 e.g。

CAT{TT} Dog{DD} Horse{AA}
Snail{LL} RAT{TT}
ANT{AA}

这些应该转化为:

cat{TT} dog{DD} horse{AA}
snail{LL} rat{TT}
ant{AA}

作为第一次开始,我将列表中的所有内容放低,并将它们放在lcChar中(代码如下)。然后我试图找到括号内的低位字符,以便我可以再次对它们进行大写。

作为一名蟒蛇新手,我被困在下面的代码中。这只给出了大括号中的第一个项目。此外,我假设我需要另一个循环,以大写括号中出现的所有项目。请帮忙,以便我能理解处理这类问题的最佳方法吗?

import re
f = open(r'C:\Python27\MyScripts\Data.txt')
for line in f:
    lcChar = (line.lower())

patFinder1 = re.compile('{[a-z]+}')
findPat1=re.findall(patFinder1, lcChar)

1 个答案:

答案 0 :(得分:2)

re.subre.subn允许第二个参数为函数。匹配对象被传递到该函数中,并且函数返回的任何内容都用于替换。

这是我的看法:

import re

def manip(m):
    return m.groups()[0].lower()

data = ['CAT{TT} Dog{DD} Horse{AA}',
        'Snail{LL} RAT{TT}',
        'ANT{AA}']

for line in data:
    new_line = re.sub(r'((?:[^{]|^)[A-Z]+(?:[^}]|$))', manip, line)
    print new_line

产地:

cat{TT} dog{DD} horse{AA}
snail{LL} rat{TT}
ant{AA}

我本可以使用lambda代替,但可以说不太明确。