3

他にも正規表現に関する質問がたくさんあることは知っていますが、誰かが私の正規表現の何が問題なのかを指摘してくれることを望んでいました。私はそれについていくつかの調査を行いましたが、うまくいくようです。私はそれをテストするためにルビュラーを使用しました。はい、それがルビーの正規表現であることは知っていますが、使用したのと同じルールがpython docsのように見えるものからpythonに適用されるはずです

現在、私は持っています

a = ["SDFSD_SFSDF234234","SDFSDF_SDFSDF_234324","TSFSD_SDF_213123"]
c = [re.sub(r'[A-Z]+', "", x) for x in a]

返す

['SDFSD_SFSDF', 'SDFSDF_SDFSDF_', 'TSFSD_SDF_']

でも返してほしい

['SDFSD_SFSDF', 'SDFSDF_SDFSDF', 'TSFSD_SDF']

この正規表現を使用しようとしています

c = [re.sub(r'$?_[^A-Z_]+', "", x) for x in a]

しかし、私はこのエラーが発生しています

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

誰かが私が間違っていることを理解するのを手伝ってくれますか?

4

5 に答える 5

2
import re

a = ["SDFSD_SFSDF234234","SDFSDF_SDFSDF_234324","TSFSD_SDF_213123"]
c = [re.match(r'[A-Z_]+[A-Z]', x).group() for x in a]

print c

結果:

['SDFSD_SFSDF', 'SDFSDF_SDFSDF', 'TSFSD_SDF']

例で使用する「re.sub」は、検索ではなく正規表現置換コマンドであることに注意してください。あなたの正規表現は、あなたが求めているものを取得するために取り除こうとしているものではなく、あなたが求めているものと一致しているようです。

于 2013-07-17T22:04:49.563 に答える
1
于 2013-07-17T22:15:47.453 に答える