擅长:python、mysql、java
<p>要采用的方法是使用捕获组,以便以后可以引用它们</p>
<pre><code>result = re.sub(r"(\{text1\}) (\{stringA\}) (\{text2\}) (\{stringB\}) (\{text3\})", r"\1 \4 \3 \2 \5", subject)
</code></pre>
<p>捕获组由括号()标识,在python中通过\x引用它们,其中x是捕获组的编号</p>
<p><strong>更新1</strong></p>
<p>您的示例使您更清楚地了解您想要什么以及当前如何看待regex。正则表达式匹配字符的模式。你想交换名字(Tom,Tim,…),所以我们需要想出一个模式来匹配一个只有完全枚举才能匹配的名字。在我的语言中有成千上万的名字,其中一些还用来指物体而不是人。为了做出这种区分,你必须考虑正则表达式不能考虑的上下文。让我知道这是否有意义,因为如果你想更进一步,这是很重要的。在</p>
<p><strong>更新2</strong></p>
<p>我怀疑你的问题是出于好奇,不是为了解决现实生活中的问题。但如果我们继续下去,这会让你走得更远,但这并不完美,也不可能</p>
<p>正则表达式</p>
^{pr2}$
<p>替换为</p>
<pre><code>\1\4\3\2
</code></pre>
<p>在python中</p>
<pre><code>result = re.sub(r"(?sm)(.*)\b(John|Tim|Jo)\b(.*)\b(John|Tim|Jo)\b", r"\1\4\3\2", subject)
</code></pre>
<p>请注意regex中的\b,它声明匹配应该发生在单词边界处。这会阻止像约翰多这样的比赛。在</p>
<p>还要注意,上面的正则表达式对于这个句子来说是失败的</p>
<blockquote>
<p>Tim bought some top level domains of Jordan that end with Jo from John</p>
</blockquote>