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)
答案 0 :(得分:2)
re.sub
和re.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
代替,但可以说不太明确。