搜索一个字符串,并将其替换为一个变量
我想用正则表达式来搜索一个UUID数字的文档,并用新的数字替换它的结尾。我到目前为止的代码是:搜索一个字符串,并将其替换为一个变量
read_file = open('test.txt', 'r+')
write_file = open('test.txt', 'w')
r = re.compile(r'(self.uid\s*=\s*5EFF837F-EFC2-4c32-A3D4\s*)(\S+)')
for l in read_file:
m1 = r.match(l)
if m1:
new=(str,m1.group(2))
new??????
这里我卡住了。
文件test.txt
具有存储在它下面的UUID:
self.uid = '5EFF837F-EFC2-4c32-A3D4-D15C7F9E1F22'
我想更换部分D15C7F9E1F22
。
我也试过这样:
r = re.compile(r'(self.uid\s*=\s*)(\S+)')
for l in fp:
m1 = r.match(l)
new=map(int,m1.group(2).split("-")
new[4]='RHUI5345JO'
但我似乎无法匹配的字符串。
在此先感谢您的帮助。
前瞻性替代?
你不能只是使用
for l in read_file:
l.replace("5EFF837F-EFC2-4c32-A3D4-D15C7F9E1F22",
"5EFF837F-EFC2-4c32-A3D4-RHUI5345JO")
# Write to file..
还是有更多的故事比你告诉我们吗?另外,除非它是一个太大的文件,否则我会建议将整个文件读入一个字符串中,并且为了提高速度而只做一个替换。
我觉得你的正则表达式关:
r = re.compile(r'(self.uid\s*=\s*5EFF837F-EFC2-4c32-A3D4\s*)(\S+)')
应该是:
r = re.compile(r"(self\.uid\s*=\s*'5EFF837F-EFC2-4c32-A3D4-)([^']*)'")
然后,当你有一个比赛,抢1组,并将其分配给一个变量和追加的更换字符串。
([^']*)
组将搜索高达'
标记的任何字符。这是你的目标移除组。
编辑:2010年6月11日@ 2:27 EST:贾斯汀皮尔有一个好点。你可以直接搜索并用这些数据替换。除非你正在寻找的8个字符的模式,其次是4,4,4,和12 ...在这种情况下,你可以使用该模式:你为什么要使用正则表达式这样的直
r = re.compile(r"self\.uid\s*=\s*('\w{8}-(:?\w{4}-){3})(\w{12})'")
我得到该解决方案的语法错误? – chrissygormley 2010-06-11 16:17:13
感谢您的帮助,但我有一个额外的支架。我试图删除它,但我无法读取字符串。我可能已经在错误的地方去掉了支架。 – chrissygormley 2010-06-14 09:24:41
我已经修复并测试了它:现在就试试。 – 2010-06-11 16:29:44
你在说我的一般情况下的正则表达式吗?我也修复了它。对不起,错误。 – 2010-06-14 13:24:46