Python 搜索字符串并将其替换为变量

Python 搜索字符串并将其替换为变量,python,regex,Python,Regex,我正在尝试使用正则表达式搜索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:

我正在尝试使用正则表达式搜索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'
但我似乎无法匹配字符串


提前感谢您的帮助。

我想您的正则表达式已关闭:

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:贾斯汀·皮尔有一个很好的观点。您可以直接搜索并替换为此数据。除非您正在寻找8个字符的模式,后跟4、4、4和12。。。在这种情况下,您可以使用以下模式:

r = re.compile(r"self\.uid\s*=\s*('\w{8}-(:?\w{4}-){3})(\w{12})'")

为什么要用正则表达式来直接替换

你就不能用它吗

for l in read_file:
    l.replace("5EFF837F-EFC2-4c32-A3D4-D15C7F9E1F22",
              "5EFF837F-EFC2-4c32-A3D4-RHUI5345JO")
    # Write to file..

还是说这个故事比你告诉我们的还要多?此外,除非文件太大,否则我建议将整个文件读入一个字符串,并仅对其进行一次替换,以提高速度。

我已经修复并测试了它:现在就试试。您是在谈论我的通用case regex吗?我也把它修好了。很抱歉出错。谢谢你的帮助,但我想还有一个额外的括号。我试图删除它,但我无法读取字符串。我可能把支架拆错了地方。