2016-07-14 6 views
0

は、私はこのように、文字列のリストから文字列を一致させることができます。Pythonでregex:どのように変数の文字列をパターンで使用するのですか?

keys = ['a', 'b', 'c'] 
for key in keys: 
    if re.search(key, line): 
     break 

問題は、私は私のように指定します。正規表現+文字列からなるパターンにマッチしたいということです。このような何か:

keys = ['a', 'b', 'c'] 
for key in keys: 
    if re.search('[^\[]'+key+'[^\]]', line): 
     break 

が、これは動作しません(この例では、私は、彼らが乗括弧で表示された場合にのみ「A」、「B」と「C」と一致したいと思います)。 これは生の弦などと関係がありますが、動作させる方法が見つからないと思います。提案?

EDIT:

のは、私はもう少し複雑なパターンにマッチさせたいとしましょう:

'[^\s*data\.'+key+'\s*=\s*\[(.+)[^\]]' 

括弧内の数字を一致させるために:

data.a = [12343.232 ] 
+0

そして 're.search(r '\ [{}]'。書式(キー)、行)'を使います。 'r '[{}]'。書式(キー)の行に'。 https://ideone.com/UimIyJ –

+1

を参照してください "...私は彼らが角括弧で表示される場合、[...]と一致したいと思います"なぜあなたは角括弧を否定したのですか? –

+0

もっと複雑なものにマッチさせたいのですが?私が作った編集のように – simona

答えて

1
re.search('\['+re.escape(key)+']', line): 

この[key]と一致します。 keyの文字が正規表現として解釈されないように、re.escapeが追加されていることに注意してください。

+1

']'をエスケープする必要はありません。 –

+0

ヒントはありがとうございますが、よろしいですか? key = abcならば、正規表現は '[abc]'の魔女はa、b、またはcにマッチしますか?私はここで何を欠場するのですか? – keksnicoh

+1

いいえ、 '['はエスケープする必要があり、 ']'はそうする必要はありません。 –

関連する問題