<p>我知道还有很多其他的正则表达式问题,但我希望有人能指出我的正则表达式有什么问题。我对它做了一些研究,看来应该行得通。我用<a href="http://rubular.com/" rel="nofollow">rubular</a>来测试它,是的,我知道这是ruby的regex,但是我使用的相同规则应该适用于python,从它在<a href="http://docs.python.org/2/library/re.html" rel="nofollow">python docs</a>中的样子来看</p>
<p>目前我有</p>
<pre><code>a = ["SDFSD_SFSDF234234","SDFSDF_SDFSDF_234324","TSFSD_SDF_213123"]
c = [re.sub(r'[A-Z]+', "", x) for x in a]
</code></pre>
<p>它回来了</p>
^{pr2}$
<p>但我希望它能回来</p>
<pre><code>['SDFSD_SFSDF', 'SDFSDF_SDFSDF', 'TSFSD_SDF']
</code></pre>
<p>我试着用这个正则表达式</p>
<pre><code>c = [re.sub(r'$?_[^A-Z_]+', "", x) for x in a]
</code></pre>
<p>但我得到了这个错误</p>
<pre><code>Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.6/re.py", line 151, in sub
return _compile(pattern, 0).sub(repl, string, count)
File "/usr/lib64/python2.6/re.py", line 245, in _compile
raise error, v # invalid expression
</code></pre>
<p>谁能帮我弄清楚我做错了什么吗?在</p>
<p>错误在于:</p>
<pre><code>c = [re.sub(r'$?_[^A-Z_]+', "", x) for x in a]
</code></pre>
<p>是由<code>?</code>引起的,它前面没有任何字符,因此它不知道匹配0或1次的内容。如果将其更改为:</p>
^{pr2}$
<p>正如你所期望的那样。在</p>
<p>还有一件事,<code>$</code>是用来引爆行尾的,所以它可能不应该是第一个字符。在</p>