2016-05-23 17 views
-1

Ich versuche, diesephp -function in Python zu verwandeln:Php Äquivalent von substr und strpos in Python

function trouveunebrique($contenu, $debut, $fin) { 
    $debutpos = strpos($contenu, $debut); 
    $finpos = strpos($contenu, $fin, $debutpos); 
    if ($finpos == 0) { 
    $finpos = strlen($contenu); 
    } 
    $nbdebut = strlen($debut); 
    if ($debutpos > 0) { 
    $trouveunebrique = substr($contenu, ($debutpos + $nbdebut), ($finpos - $debutpos - $nbdebut)); 
    } 
    else { 
    $trouveunebrique = ""; 
    } 

    return (trim($trouveunebrique)); 
} 

Ich suchte here aber ich could't die Lösung finden. Ich habe auch versucht dies:

def trouveunebrique(contenu, debut, fin) 
     debutpos = haystack.find(contenu, debut) 
     finpos = haystack.find(contenu, fin) 
     if (finpos == 0) 
      finpos = len(contenu) 
     nbdebut = len(debut) 
     if (debutpos > 0): 
      trouveunebrique = substr(contenu, (debutpos + nbdebut), (finpos - debutpos - nbdebut)) 
     else: 
      trouveunebrique = "" 
     return trouveunebrique.strip() 
+0

Also, was Ihre Frage ist? – spectras

+0

@spectras ich möchte meine Php-Funktion in Python umwandeln – parik

+0

Sei es Python oder PHP, immer noch super hässlich;) Wenn du Lust auf Refactoring hast, würde ich reguläre Ausdrücke empfehlen. –

Antwort

3

Um Substrings in Python (und alle Subsequenzen für diese Angelegenheit) zu erhalten verwenden slice notation, die Indizierung ähnlich ist, aber zumindest ein Doppelpunkt zwischen Klammern:

>>> "Hello world"[4:7] 
'o w' 
>>> "Hello world"[:3] 
'Hel' 
>>> "Hello world"[8:] 
'rld' 

Sie haben strpos() gleichwertig gefunden: str.find() Methode für String-Objekte. Beachten Sie auch, dass Sie einen zusätzlichen Index, um es wie in der PHP-Funktion zur Verfügung stellen kann:

debutpos = contentu.find(debut) 
# ... 
finpos = contenu.find(fin, debutpos) 

Es gibt -1, wenn String nicht gefunden wird. Ansonsten verhält es sich wie PHP-Äquivalent.

+0

danke, ich kann dies für substringin tun, und für strpos was ich tun kann? – parik

+0

Checkout mein Antwort-Update. Ich empfehle das verknüpfte Tutorial zu grundlegenden Python-Funktionen. Es lohnt sich wirklich, es zu lesen. –

1

Also, wenn ich richtig verstanden habe, möchten Sie einen Teilstring in contenu beginnend mit debut finden und durch fin beenden?

Also, wenn Sie

>>> str = "abcdefghi" 
>>> debut = "bcd" 
>>> fin = "hi" 

einrichten Sie tun möchten:

>>> trouveunebrique(str, debut, fin) 
bcdefghi 

Wenn das der Fall ist, was Sie suchen, ist (string).find die strpos

wie Ihr Verhalten So Ihre Methode sieht so aus:

def trouveunebrique(contenu, debut, fin): 
    indice_debut = contenu.find(debut) 
    indice_fin = contenu.find(fin) 
    return contenu[indice_debut : indice_fin + len(fin)] 

Oder kurz:

def trouveunebrique(contenu, debut, fin): 
return contenu[contenu.find(debut):contenu.find(fin) + len(fin)] 

Auch da Sie nach Ihrer debutfin sein wollen folgendes arbeiten:

def trouveunebrique(contenu, debut, fin): 
    indice_debut = contenu.find(debut) # find the first occurence of "debut" 
    indice_fin = contenu[indice_debut:].find(fin) # find the first occurence of "fin" after "debut" 
    return contenu[indice_debut : indice_debut + indice_fin + len(fin)] 
+0

funktioniert meine Funktion in PHP, aber Ihr Vorschlag gibt leere Zeichenfolge zurück – parik

+0

Aktualisiert habe ich die + 'len (fin)' (um 'fin' in der Teilzeichenfolge hinzuzufügen). Auch jetzt ist 'fin' immer nach' debut' – Mengard