2

我有这个 Perl 正则表达式,我想将它转换为 Python。

我想要的正则表达式是查找文本并将其转换为大写的搜索和替换。它也必须是第一个出现的结果。Perl 正则表达式:

open FILE, "C:/thefile.txt";
while (<FILE>){
    # Converts "foo yadayada bar yadayada"
    #       to "FOO  bar yadayada"
    s/(^.*?)(yadayada)/\U$1/;
    print;
}

我拥有的 Python 正则表达式无法正常工作:

import re
lines = open('C:\thefile.txt','r').readlines()
for line in lines:
    line = re.sub(r"(yadayada)","\U\g<1>", line, 1)
    print line

我意识到\U\g<1>这是行不通的,因为 Python 不支持\U大写字母.. 那我用什么!?!

4

2 回答 2

3

re.sub可以接受一个函数,该函数处理每个匹配对象并返回一个字符串。所以你可以这样做:

In [4]: def uppergrp(match):
   ...:     return match.group(1).upper()
   ...: 

In [5]: re.sub("(yada)", uppergrp, "abcyadadef", count=1)
Out[5]: 'abcYADAdef'

在 Python 中使用正则表达式不太方便,但与 Perl 编码人员相比,Python 程序员往往不太热衷于使用正则表达式。

于 2012-05-17T16:22:56.377 回答
2

sub 的第二个参数也可以是一个函数,这意味着如果 python 中的正则表达式语言不能完成你想要的(或者至少让它变得非常困难),你可以定义你自己的函数来代替。

例如。

re.sub(pattern, lambda x: x.group(1).upper(), string)

编辑:函数被传递了一个MatchObject

于 2012-05-17T16:23:00.070 回答