2017-01-25 10 views
0

変数device='A/B/C/X1'があり、別のファイルにコメントアウトされています。 'A/B/C/[email protected]',[email protected]などの同じデバイスのインスタンスが複数存在する可能性があります。これらのデバイスはすべて、接頭辞が*の別のファイルでコメントアウトされています。regexエラー:エラーを発生します。v#無効な式です。

私は*を削除しますが、'A/B/C/X**10**'のような類似のデバイスには影響しません。

正規表現を使用して次のコード行を使用して単純にパターンを置換しようとしましたが、InvalidExpressionエラーが発生しています。

line=re.sub('^*'+device+'@',device+'@',line) 

助けてください。

答えて

3

アスタリスクは、正規表現の構文で意味があるため、エスケープする必要があります。 line=re.sub(r'^\*'+device+'@',device+'@',line)。あなたが正規表現を構築するために使用する変数をエスケープ

も常に良い考えです: line=re.sub(r'^\*'+re.escape(device)+'@',device+'@',line)

+0

それとも、それはあまりにも値下げで特別な意味OPを持つレコードのために、あなたの正規表現文字列 – Emaro

+0

の前にRを入れました。だからこそランダムなイタリック体と太字のテキストがあったのです。 – Tagc

+0

@Emaroこれは、文字列内のバックスラッシュのアンエスケープを無効にするだけで十分ではありません。 –

関連する問題