2016-09-16 3 views
-1

Ich versuche Regex zu verwenden, um die Schlüssel in einem Dict zu suchen und die Übereinstimmungen zurückzugeben. Der folgende Code ist vom echten Code vereinfacht, zeigt aber das Problem.Python-Code funktioniert nach einer Druckanweisung anders

#!/bin/python 

# Import standard Python modules 
import os, sys, string, pdb, re 

key="" 
pat="" 

steps = {"pcb":"xxx","aoi":"xxx","pcb-pec":"xxx","pcb_1":"xxx"} 
pat = "pcb" 

print"***Search the dict***" 
for key in steps: 
    print re.search(key,pat) 

print"***Search the key***" 
key = "pcb-pec" 
pat = "pcb" 
print re.search(key,pat) 

print"***Search the key after printing it***" 
key = "pcb-pec" 
pat = "pcb" 
print 'key:' + key+ ' ,pattern:' + pat 
print re.search(pat,key) 

exit() 

Und der Ausgang ist dies:

***Search the dict*** 
<_sre.SRE_Match object at 0x00000000031FBC60> 
None 
None 
None 
***Search the key*** 
None 
***Search the key after printing it*** 
key:pcb-pec ,pattern:pcb 
<_sre.SRE_Match object at 0x00000000031FBC60> 

Ich verstehe nicht, warum das Muster nicht auf der 3. und 4. Schlüssel gefunden wird.

Ich verstehe nicht, warum das Muster auch nicht im zweiten Test gefunden wird.

Ich verstehe wirklich nicht, warum es im dritten Test gefunden wird, der der gleiche ist wie der zweite, aber mit einer Druckanweisung.

Dies ist mein erster Beitrag, aber ich habe viel gelernt, indem ich hier gesucht und gelesen habe. Vielen Dank an euch alle.

+0

'print re.search (pat, key)' – vks

+0

Manchmal 're.search (key, pat)' und manchmal 're.search (pat, key)' – zvone

Antwort

2

Die Signatur von re.search (gegeben als re.search(pattern, string, flags=0)) nimmt zuerst das Muster, dann die Zeichenfolge.

Sie sollten die Reihenfolge der Parameter tauschen:

re.search(pat, key) 
#   ^^^^^^^^ 

Und dann werden die anderen Tasten funktionieren:

In [27]: pat = "pcb" 

In [28]: key = "pcb-pec" 

In [29]: re.search(key,pat) # wrong order 

In [30]: re.search(pat,key) # right order 
Out[30]: <_sre.SRE_Match object; span=(0, 3), match='pcb'> 
2

Sie die Reihenfolge der Parameter in Ihrem letzten Fall ändern. Sie haben sie die ersten paar Male aus der Ordnung, und in der richtigen Reihenfolge letztmalig

re.search(pat,key) 

ist die richtige Reihenfolge.

In der Schleife erhalten Sie eine Übereinstimmung, sobald das Muster und die Zeichenfolge identisch sind.

Verwandte Themen