<p>您的主要问题是<code>RG\S+</code>不匹配<code>RG 1</code>,因为该空格不匹配一个或多个非空格字符。我想你想要<code>\s+</code>那里?(或者<code>\S*</code>?但是我没有看到任何<code>RG1</code>类型的匹配。或者什么都没有,因为我不确定任何子模式在这里试图做什么?)你知道吗</p>
<pre><code>(\S+)\s+(RG\s+).\n.*\s(\S+)\s+(AQ\S+)
</code></pre>
<p><img src="https://www.debuggex.com/i/Y5mPwjxVFVyopSIm.png" alt="Regular expression visualization"/></p>
<p><a href="https://www.debuggex.com/r/Y5mPwjxVFVyopSIm" rel="nofollow">Debuggex Demo</a></p>
<p>但是,这并不能提供所需的输出。它给你的是:</p>
<pre><code>[('muy', 'RG ', 'malo', 'AQ0MP0'), ('muy', 'RG ', 'sencillo', 'AQ0FS0')]
</code></pre>
<p><code>'RG '</code>很明显,你试图在<code>RG</code>之后匹配一些<em>必须的东西,而在<code>RG</code>之后唯一的东西就是一个空格,那么你还能得到什么呢?你知道吗</p>
<p>您似乎还希望分别匹配第一行和第二行,这是可行的,但只能使用一个包含lookaheads和lookbehinds的极其复杂的表达式,并且只需对列表进行后期处理就简单得多。你知道吗</p>
<p>你似乎也希望这两对按相反的顺序排列。我想这在理论上是可能的,但我完全不知道你是怎么开始这么做的,我怀疑任何有效的方法都需要指数级的时间,通过后处理要简单得多。你知道吗</p>
<p>最后,出于某种原因,您希望第二对只匹配<code>('muy')</code>,而不是<code>('muy', 'RG')</code>,这(a)没有任何意义,因为<code>('muy')</code>不是一个1项元组,它只是字符串<code>'muy'</code>,(b)我不知道你第一次怎么能把两件东西搭配起来,但第二次只能把一件东西搭配成完全相同的图案和同一条线。你知道吗</p>
<p>假设您的大多数需求实际上都不是真实的,您唯一想做的就是将它们从4s重新组合为2s,如下所示:</p>
<pre><code>[('muy', 'RG'), ('malo', 'AQ0MP0'), ('muy', 'RG'), ('sencillo', 'AQ0FS0')]
</code></pre>
<p>…我将<code>\s+</code>移出正则表达式,并将结果从4组后处理为2组,如下所示:</p>
<pre><code>result = re.findall(r"(\S+)\s+(RG)\s+.*\n.*\s(\S+)\s+(AQ\S+)",very_largeString)
flattened = (x for y in result for x in y)
paired = list(zip(flattened, flattened))
</code></pre>