Regular Expressions

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
RicmanX
User
Beiträge: 69
Registriert: Donnerstag 29. August 2002, 17:10
Wohnort: Erfurt
Kontaktdaten:

Hi,

ich habe mal angefangen mich mit RE in Python auseinander zu setzen, aber irgendwie komm ich da nicht wirklich weiter. Wie nutz ich sie effizient und einfach? Wär schön wenn das mal an dem Beispiel ginge, was von PERL kommt:

Code: Alles auswählen

$browser=$ENV{'HTTP_USER_AGENT'};
if($browser=~ /Opera (\d\.\d{1,2})/i) 		{ $opera="$1" } # Opera
if($browser=~ /MSIE (\d\.\d{1,2})/i && !$opera) 	{ $ie="$1"; } # Interexplorer
if($browser=~ /Mozilla\/(4\.\d{1,2})/i && !$opera) 	{ $ns="$1"; } # NS4
if($browser=~ /Mozilla\/(\d\.\d{1,2}).*Gecko/i) 	{ $gecko="$1"; } # NS6/Mozilla
Ich hoff ma das es ähnlich einfach geht!?

thx, Ric
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Hallo!

Vielleicht geht es so:

Code: Alles auswählen

browser = "MSIE 7.77"

try:
	opera = re.findall(r"Opera (\d\.\d{1,2})",browser)[0]
except IndexError:
	try:
		ie = re.findall(r"MSIE (\d\.\d{1,2})",browser)[0]
	except IndexError:
		try:
			ns = re.findall(r"Mozilla (\d\.\d{1,2})",browser)[0]
		except IndexError:
			pass # und so weiter
findall() gibt eine Liste der gefundenen Gruppen zurück, in diesem Fall bei Erfolg eine Liste mit genau einem Element. Wenn der Pattern nicht passt, ist die Liste leer und beim Zugriff auf das erste Element erfolgt eine IndexError-Ausnahme. Ich weiß nicht ob das guter Stil ist, aber ich arbeite gerne mit try anstelle von if.

Jan
RicmanX
User
Beiträge: 69
Registriert: Donnerstag 29. August 2002, 17:10
Wohnort: Erfurt
Kontaktdaten:

Ich hoff ma es ist nich so schlimm wenn's hier net wirklich passt, aber brauch was um Sonderzeichen (HTML) in Hex-Zeichen umwandeln zu könn:

Code: Alles auswählen

sub encode {
my $str=$_[0];
$str =~ s/([^0-9a-zA-Z\-\_\.\,\@\!\~\*\'\(\)])/(($1 eq " ") ? "+" : "&#x".sprintf("%02x",ord($1)).";")/ego;
return $str;
}


sub decode {
my $str=$_[0];
$str =~ tr/+/ /;
$str =~ s/&#x([A-Fa-f0-9]{2});/pack("C", hex($1))/eg;
return $str;
}
Könnt ihr mir mal wieder helfen? :D
Antworten