在Python中Php等效于substr和strpos

在Python中Php等效于substr和strpos

问题描述:

I try to transform this php-function into 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));
}

I searched here but i could't find the solution. I also tried this:

   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()

我尝试将 php strong> -function转换为 Python strong> : p>

  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)); 
} 
  code>  pre> 
 
 

我搜索了这里但我找不到解决方案。 我也试过这个: p>

  def trouveunebrique(contenu, 首次亮相,fin)
 debutpos = haystack.find(contenu,debut)
 finpos = haystack.find(contenu,fin)
 if(finpos == 0)
 finpos = len(contenu)
 nbdebut = len  (登场)
  if(debutpos>  0):
 trouveunebrique = substr(contenu,(debutpos + nbdebut),(finpos  -  debutpos  -  nbdebut))
 else:
 trouveunebrique =“”
返回trouveunebrique.strip()
  code>  
  div>

To get substrings in Python (and any subsequences for that matter) use slice notation, which is similar to indexing but contains at least one colon between brackets:

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

You figured out strpos() equivalent already: str.find() method on string objects. Also note that you can provide an additional index to it like in your PHP function:

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

It returns -1 when substring is not found. Otherwise, it behaves like PHP equivalent.

So if I understood correctly, you want to find a substring in contenu starting by debut and finish by fin ?

So if you set up

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

You want to do :

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

If that's the case, what you are looking for is (string).find which behave like your strpos

So your method will looks like this :

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

Or in short :

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

Also since you want your fin to be after your debut, the following should work :

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)]