---
slug: "replace-version-number-pattern-python"
title: "Python re でバージョン番号の置換 (正規表現パターン (〜) の中だけ置換)"
description: "ファイルが version_number = \"19\";\nみたいになっていて、正規表現でそのファイルを置換する時、バージョン番号のみを正規表現パターンとして、それ以外はパターン記号で囲いたくない場合。\nただし、置換後は version_number を含んだ文字列で取得したい。"
url: "https://www.ytyng.com/blog/replace-version-number-pattern-python"
publish_date: "2018-09-21T03:37:25Z"
created: "2018-09-21T03:37:25Z"
updated: "2026-02-27T05:59:01.276Z"
categories: []
keywords: ""
featured_image_url: "https://media.ytyng.com/resize/20230812/7c9a39df15584857980f3e6f95ecac5b.png.webp?width=768"
has_video: false
has_music: false
video_urls: []
music_urls: []
lang: "ja"
---

# Python re でバージョン番号の置換 (正規表現パターン (〜) の中だけ置換)

<p>ファイルが</p>
<p>version_number = "19";</p>
<p>みたいになっていて、正規表現でそのファイルを置換する時</p>
<pre style="background-color: #ffffff; color: #000000; font-family: 'Menlo'; font-size: 9.0pt;"><span style="color: #008080; font-weight: bold;">version_number = "(\d+)";</span></pre>
<p>といったように、バージョン番号のみを正規表現パターンとして、それ以外はパターン記号で囲いたくない場合。</p>
<p>ただし、置換後は</p>
<p>version_number = "20";</p>
<p>と、version_number を含んだ文字列で取得したい。</p>
<pre style="background-color: #ffffff; color: #000000; font-family: 'Menlo'; font-size: 9.0pt;">regex = re.compile(<span style="color: #008000; font-weight: bold;">'version_number = "(\d+)";'</span>)<span style="color: #000080; font-weight: bold;"><br /><br />def </span>_replace(match):<br />    startindex = match.regs[<span style="color: #0000ff;">1</span>][<span style="color: #0000ff;">0</span>] - match.regs[<span style="color: #0000ff;">0</span>][<span style="color: #0000ff;">0</span>]<br />    end_index = match.regs[<span style="color: #0000ff;">0</span>][<span style="color: #0000ff;">1</span>] - match.regs[<span style="color: #0000ff;">1</span>][<span style="color: #0000ff;">1</span>]<br />    <span style="color: #000080; font-weight: bold;">return </span>match.group(<span style="color: #0000ff;">0</span>)[:startindex] + <span style="color: #000080;">str</span>(value) + match.group(<span style="color: #0000ff;">0</span>)[-end_index:]<br /><span style="color: #000080; font-weight: bold;">return </span><span style="color: #94558d;"></span>regex.sub(_replace, <span style="color: #94558d;">self</span>.get_source_code())</pre>
<p>このように、_replace のコールバックの、match.regs にマッチ箇所のインデックスが入っているので、それで文字列をスライスすればうまくいくかも</p>
