我正在尝试使用正则表达式搜索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'
但我似乎无法匹配字符串。
提前感谢您的帮助。
答案 0 :(得分:3)
为什么使用正则表达式进行这种直接替换?
你能不能只使用
for l in read_file:
l.replace("5EFF837F-EFC2-4c32-A3D4-D15C7F9E1F22",
"5EFF837F-EFC2-4c32-A3D4-RHUI5345JO")
# Write to file..
还是故事还有比你告诉我们更多的东西?此外,除非它是一个太大的文件,我建议将整个文件读成一个字符串,并为了速度只做一个替换。
答案 1 :(得分:1)
我认为你的正则表达式已关闭:
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: Justin Peel有一个好点。您可以直接搜索并替换此数据。除非您正在寻找8个字符的模式,然后是4个,4个,4个和12个...在这种情况下您可以使用该模式:
r = re.compile(r"self\.uid\s*=\s*('\w{8}-(:?\w{4}-){3})(\w{12})'")