Perl正则表达式的Python版本

时间:2012-05-17 16:14:09

标签: python regex perl scripting

我有这个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大写..所以我该怎么用!?!

2 个答案:

答案 0 :(得分: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中使用正则表达式不太方便,但Python程序员倾向于使用正则表达式而不是Perl编码器。

答案 1 :(得分:2)

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

例如

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

编辑:函数传递MatchObject