6

私は RE にあまり詳しくありませんが、リストを反復処理してre.sub、 variable に保持されている大きなテキスト ブロックから複数の項目を取り出すために使用しようとしていますfirst_word

最初にre.subタグを削除していましたが、これはうまくいきましたが、次にexclusionList変数内のすべての文字列を削除したいのですが、これを行う方法がわかりません。

助けてくれてありがとう、これは例外を発生させるコードです。

exclusionList = ['+','of','<ET>f.','to','the','<L>L.</L>']

for a in range(0, len(exclusionList)):
      first_word = re.sub(exclusionList[a], '',first_word)

そして例外:

first_word = re.sub(exclusionList[a], '',first_word)
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 151, in sub
return _compile(pattern, flags).sub(repl, string, count)
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 245, in _compile
raise error, v # invalid expression error: nothing to repeat
4

2 に答える 2

10

プラス記号は、「前の1つ以上の繰り返し」を意味する正規表現の演算子です。たとえば、x+の1つ以上の繰り返しを意味しxます。実際の標識を見つけて置き換えたい場合は、次の+ようにエスケープする必要がありますre.sub('\+', '', string)。したがって、excludeListの最初のエントリを変更します。

次のように、forループを削除することもできます。

exclusions = '|'.join(exclusionList)
first_word = re.sub(exclusions, '', first_word)

パイプ記号|は正規表現の論理和を示しているため、x|y|zx、y、またはzに一致します。

于 2012-06-10T12:17:36.963 に答える
2

プログラムの基本的な形式は正しいので、使用している正規表現に問題があると思われます。「+」自体は無効な正規表現です。「\」を使用してエスケープする必要があります。

使用上の観点から言えば、Python では文字列がバックスラッシュ エスケープを行わないように指定できるため、単に「\」を意味するときに正規表現に「\\」を散らかす必要はありません。これの構文は、 のように先頭の「r」でありr'\+'、これは、exclusiveList の最初の項目を置き換える必要があるものです。

「to」、「the」などの単語を抽出する場合は、単語全体を抽出していることを確認し、誤って「tooth」の「to」や「the」を抽出しないようにする必要があります。 「その他」に「. これを防ぐために単語境界を指定するには、「\b」を追加しr'\bto\b'ますr'\bthe\b'

最後にfor a in range(0, len(exclusionList)):、リスト自体を反復処理するだけで、より簡単に記述できます: for exclusion in exclusionList:.

于 2012-06-10T12:24:25.797 に答える