Ich muss mit einer Liste von Zeichenfolge Werten übereinstimmen. Ich bin mit '|' .join() einen Stachel zu bauen, die in re.match geben wird:mit OR-Operator (|) in Variable für regulären Ausdruck in Python
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
Der Code Ergebnis ist:
r'Loopback|GigabitEthernet'
None
Allerdings, wenn ich an den String direkt kopieren in Übereinstimmung:
interface=re.match(r'Loopback|GigabitEthernet',line)
Es funktioniert:
r'Loopback|GigabitEthernet'
<_sre.SRE_Match object at 0x7fcdaf2f4718>
Ich habe versucht, .join in rex mit "Loopback | GigabitEthernet" zu ersetzen und es hat auch nicht funktioniert. Es sieht so aus, als ob das Pipe-Symbol nicht als Operator behandelt wird, wenn es von String übergeben wird. Irgendwelche Gedanken, wie man es repariert?
das rohe Präfix ist in diesem Fall nutzlos. Problem ist, dass Ihre generierte Regex einfache Anführungszeichen enthält. Entferne sie: 'rex = '|' .join (Interface-Namen)' –
Du hast den gleichen String nicht kopiert/eingefügt, als du deinen Test gemacht hast. Es müsste 're.match (" r'Loopback | GigabitEthernet '", line)' sein. – melpomene
Danke. War sicher, dass ich es irgendwann einmal versucht habe, aber eindeutig etwas falsch gemacht hat. Es funktioniert perfekt. – lem