REGEX-Muster, um bestimmte Zeichenfolge zu löschen

Ich habe einen String, der dieses Format hat:

some text <br>septembar 1989<br> 

Und ich benutze diese Regex finden den Monat und Jahr Teil

 <br/?>(?!=b\.)(.*?\b\d{4}\b) 

Und ich bekomme was ich will – septembar 1989

Allerdings habe ich jetzt Situation, wenn man eingefügt wird

 <br>some text <br>septembar 1989<br> 

Ergebnis: some text <br>septembar 1989

Können Sie vorschlagen, wie Sie mein vorhandenes Muster ändern, um beide Fälle zu unterstützen? Ich glaube, ich brauche irgendwie, um mich auszuspielen .*?

3 Solutions collect form web for “REGEX-Muster, um bestimmte Zeichenfolge zu löschen”

Versuche dies

 <br/?>([^<]+)\d{4} 

[^<] Bedeutet, dass alles außer einem Eröffnungs-Tag ist, was du willst.

Ich habe einen einfachen Code geschrieben, vielleicht findest du dich zu einem gewissen Grad:

 import re def getDate(str): m = re.match("[\<br>]*[\w\s]*\<br>([\w\s]*[12][0-9]{3})",str); return m.group(1) print getDate("some text <br>dec 1989<br>"); print getDate("<br> some text <br>septembar 1989<br>"); print getDate("grijesh chuahan <br>feb 2009<br>"); 

Ausgabe:

 dec 1989 septembar 1989 feb 2009 
 import re ss = 'dfgqeg<br>some text <br>septembar 1989<br>' reg = re.compile('<br(?: /)?>' '(?!.+?<br(?: /)?>.+?<br(?: /)?>)' '(.+?\d{4})' '<br(?: /)?>') print reg.search(ss).group(1) 

.

  • '<br(?: /)?>' <br /> '<br(?: /)?>' Fängt <br> und <br /> Vorkommen

.

  • '(?!.+?<br(?: /)?>.+?<br(?: /)?>)' Ist ein Blick auf die Behauptung,
    Es überprüft, dass nach der Position, wo es beginnt in der analysierten Text, gibt es nicht die Suite von Zeichen als eine Folge von:

    • .+? Irgendeine Art von Charakteren, aber die ? Befehle, dass dieser Teil muss aufhören, sobald <br> oder <br /> angetroffen wird
    • <br> oder <br />
    • Wieder irgendwelche Charaktere, die vor <br> oder <br /> aufhören
    • <br> oder <br />
Python ist die beste Programmiersprache der Welt.