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