<p>正则表达式上的几个注释:<code>(?![(].*[)])</code>匹配一个空格,该空格后面没有<code>(</code>,除了换行符以外的任何0+字符,直到行上的最后一个<code>)</code>。所以,你只有一个零长度匹配-难怪你什么也得不到。你知道吗</p>
<p>如果注释是行中的最后一个<code>(...)</code>,并且它们不能包含括号,请将<code>re.sub</code>与</p>
<pre><code>r'(?m)\s*\([^()]*\)[ \t]*$'
</code></pre>
<p>见<a href="https://regex101.com/r/iD4sC1/2" rel="nofollow">the regex demo</a>。替换为空字符串。你知道吗</p>
<p><strong>图案细节</strong>:</p>
<ul>
<li><code>\s*</code>-零个或多个空格</li>
<li><code>\(</code>-一个开口<code>(</code></li>
<li><code>[^()]*</code>-除<code>(</code>和<code>)</code>之外的零个或多个字符</li>
<li><code>\)</code>-结束语<code>)</code></li>
<li><code>[ \t]*</code>-零个或多个空格或制表符(可以替换为<code>[^\S\r\n]</code>)</li>
<li><code>$</code>—行的结尾(因为使用了<code>(?m)</code>(<code>re.MULTILINE</code>))。你知道吗</li>
</ul>
<p><a href="http://ideone.com/EbCcir" rel="nofollow">Python demo</a>:</p>
<pre><code>import re
p = re.compile(r'\s*\([^()]*\)[ \t]*$', re.MULTILINE)
s = "%\nO1000\nT1 M6\nG0 G90 G40 G21 G17 G94 G80\nG54 X-75 Y-25 S500 M3 (Start Point)\nG43 Z100 H1\nZ5\nG1 Z-20 F100\nX-50 M8 (Position 1)\nY0 (Position 2)\nX0 Y50 (Position 3)\nX50 Y0 (Position 4)\nX0 Y-50 (Position 5)\nX-50 Y0 (Position 6)\nY25 (Position 7)\nX-75 (Position 8)\nG0 Z100\nM30\n%"
result = p.sub("", s)
print(result)
</code></pre>