如何增加文件python中的最后一个数字

时间:2019-06-24 10:51:39

标签: python regex file writefile

我在文件中有以下文字

  $periods = orders::onlyTrashed()
                ->get()
                ->groupBy(function($date) {
          return \Carbon\Carbon::parse($date->created_at)->format('Y');
            })
                ->map(function ($item) {
                  return $item
                  ->sortByDesc('created_at')
                  ->groupBy(function($item) {
                    return \Carbon\Carbon::parse($item->created_at)->format('F');

                    });

                });


  return view("order.archieve", compact("periods"));

我需要提取第一行的最后一个字母并增加一个版本并附加到同一文件中。我的附加部分将是

firefox-x 46.0:
google 5.1.0.1:
    - request
    - branch

能够提取最后一个整数,但如何更新和写入同一文件。

    firefox-x 46.1:
    google 5.1.0.1:
    - request
    - branch

1 个答案:

答案 0 :(得分:1)

您可以使用

import re
rx = r'\d+(?=:$)'
s="""firefox-x 46.0:
google 5.1.0.1:
    - request
    - branch"""

print(re.sub(rx, lambda x: str(int(x.group(0)) + 1), s, 1, re.M))

输出:

firefox-x 46.1:
google 5.1.0.1:
    - request
    - branch

请参见Python demo

带有\d+(?=:$)标志的re.M正则表达式将匹配1个以上的数字,并在的末尾加上:1作为 count 参数传递给re.sub的操作将仅执行一次替换。

lambda x: str(int(x.group(0)) + 1)部分将进行第一个匹配,将匹配的1+个数字转换为整数,将1添加到值并将其转换回字符串。

要读取和写入另一个文件:

import re

rx = r'\d+(?=:$)'
with open('branch.txt', 'r') as fr:
    data = fr.read()
    with open('branch.out.txt', 'w') as fw:
        fw.write(re.sub(rx , lambda x: str(int(x.group(0)) + 1), data, 1, re.M))