文字列値のリストと照合する必要があります。Pythonの正規表現の変数にOR演算子(|)を使用する
import re
line='GigabitEthernet0/1 is up, line protocol is up'
interfacenames=[
'Loopback',
'GigabitEthernet'
]
rex="r'" + '|'.join(interfacenames) + "'"
print rex
interface=re.match(rex,line)
print interface
コード結果は次のとおりです:
r'Loopback|GigabitEthernet'
None
しかし、私は直接文字列を過ぎてコピーした場合re.matchに渡される刺さを構築するために.join()|「」私が使用しています試合:
interface=re.match(r'Loopback|GigabitEthernet',line)
それは動作します:
r'Loopback|GigabitEthernet'
<_sre.SRE_Match object at 0x7fcdaf2f4718>
私はrexの.joinを実際の "Loopback | GigabitEthernet"に置き換えようとしましたが、どちらもうまくいきませんでした。それは、パイプシンボルが文字列から渡されたときに演算子として扱われないようです。 これを修正する方法はありますか?
この場合、生の接頭辞は無意味です。問題は、生成された正規表現に簡単な引用符が含まれていることです。それらを削除してください: 'rex = '|' .join(interfacenames)' –
あなたはテストをしたときに同じ文字列をコピー/ペーストしませんでした。それは 're.match(" r'Loopback | GigabitEthernet '"、行)'でなければなりません。 – melpomene
ありがとうございます。私はいつかそれを試してみたが、明らかに何か間違ったことをした。それは完全に動作します。 – lem