<p>由于问题中的示例包含两个和四个字符串,我假设四个数字的字符串的最后两个数字将替换为<code>"19"</code>,两个数字的字符串将替换为<code>"19"</code></p>
<p>下面的正则表达式可以与<code>re.sub</code>一起使用以进行这些替换</p>
<pre><code>r'(?<!\d)(?=\d{2}(?!\d))\d{2}|(?<=(?<!\d)\d{2})\d{2}(?!\d)'
</code></pre>
<p>字符串:</p>
<pre><code>1 2 GOFE Mar
2 23 GOFE Mar
3 567 GOFE Mar
4 5678 GOFE Mar
5 3456789 GOFE Mar
</code></pre>
<p>分别成为:</p>
<pre><code>1 2 GOFE Mar
2 19 GOFE Mar
3 567 GOFE Mar
4 5619 GOFE Mar
5 34567 GOFE Mar
</code></pre>
<p><a href="https://regex101.com/r/T1wj7D/3/" rel="nofollow noreferrer">regex demo</a><a href="http://tpcg.io/WEsMg46N" rel="nofollow noreferrer">Python demo</a></p>
<p>Python的正则表达式引擎执行以下操作</p>
<pre><code>(?<!\d) : use negative lookbehind to assert previous
character is not a digit
(?= : begin positive lookahead
\d{2} : match 2 digits
(?!\d) : use negative lookahead to assert next
character is not a digit
) : end non-capture group
\d{2} : match 2 digits
| : or
(?<= : begin positive lookbehind
(?<!\d) : use negative lookbehind to assert previous
character is not a digit
\d{2} : match 2 digits
) : end positive lookbehind
\d{2} : match 2 digits
(?!\d) : use negative lookahead to assert next
character is not a digit
</code></pre>