Hallo,
ich habe hier ( http://webloria.loria.fr/~szathmar/off/ ... /index.php ) eine Seite gefunden die eine Gegenüberstellung zwischen den Regulären Ausdrücken in Perl und in Java zeigt.
Meine Frage ist wie würde dies in Python aussehen?
Vielen Grüße
Reguläre Ausdrücke
@mit: Idiomatisches Python würde bis auf das letzte Beispiel keine regulären Ausdrücke benötigen. Und auch für das letzte Beispiel würde ich einen echten HTML-Parser regulären Ausdrücken vorziehen.
Code: Alles auswählen
from __future__ import with_statement
import re
from BeautifulSoup import BeautifulSoup
def main():
EXTENSION = '.lst'
text = 'Asian.lst'
filename = None
if text.endswith(EXTENSION):
filename = text[:-len(EXTENSION)]
print filename
# -------------------------
if 'ian' in text:
print "Contains 'ian'"
# -------------------------
with open('input.txt') as lines:
for line in lines:
if 'dog' in line.lower():
print line,
# -------------------------
text = 'a dog and a dog'
text = text.replace('dog', 'cat', 1)
print text
text = text.replace('dog', 'cat')
print text
# -------------------------
text = '<a href="ad1">sdqs</a><a href="ad2">sds</a><a href=ad3>qs</a>'
for value in re.findall(r'href="?([\w]+)"?', text, re.IGNORECASE):
print value
# Alternative:
soup = BeautifulSoup(text)
for value in (a['href'] for a in soup('a')):
print value
if __name__ == "__main__":
main()
Wenn es darum geht, zu sehen, wie reguläre Ausdrücke benutzt werden, ist es natürlich ein bisschen merkwürdig, gar keine zu benutzen. Daher:
Bei Python ist lästig, dass man immer erst in einer Zeile das Match-Objekt zuweisen muss. Will man das immer und immer wieder machen, ist vielleicht eine globale Variable ganz praktisch:
Stefan
Code: Alles auswählen
import re
# get a group from a string
text = "aslan.lst"
m = re.search(r"(.*)\.lst", text)
if m:
print "found", m.group(1)
# match string against a regexp
m = re.search(r"lan", text)
if m:
print text, "contains 'lan'"
# read a file line by line and match regexp
r = re.compile("dog", re.I)
with open("/tmp/input.txt") as f:
for line in f:
m = r.search(line)
if m:
print line,
# replace first, then all occurences
text = "a vargr and another vargr"
print re.sub("vargr", "hiver", text, 1)
print re.sub("vargr", "hiver", text)
# find all occurences of a substring in a string
text = '<a href="ad1">sdqs</a><a href="ad2">sds</a><a href=ad3>qs</a>'
for m in re.finditer('href="?(.*?)"?>', text):
print m.group(1)
Code: Alles auswählen
def search(p, s): global match; match = re.search(p, s); return match
def group(n=0): return match.group(n)
text = "aslan.lst"
if search(r"(.*)\.lst", text):
print "found", group(1)
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
http://www.regular-expressions.info/
Daneben gibts natuerlich ein wunderbares How-To in der Python Dokumentation: http://docs.python.org/howto/regex.html
Daneben gibts natuerlich ein wunderbares How-To in der Python Dokumentation: http://docs.python.org/howto/regex.html
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Naja, es gibt das Buch vom Friedl was quasi der Klassiker zum Thema Regular Expressions ist. Wohl auch das einzige Buch zu dem Thema, also von dem her kein Wunder
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Danke für die Links und Tipps.
Leider weiss ich nicht wie diesen Perl Code:
in Python umschreibt. Dieser Perl Code ersetzt A mit X, d mit y usw..
Wie würde dies in Python aussehen?
Leider weiss ich nicht wie diesen Perl Code:
Code: Alles auswählen
$com = 'ADFdiKL'
$com =~ tr/ADFadf/XYZxyz/;
Wie würde dies in Python aussehen?
Das würde man so lösen:
Code: Alles auswählen
In [10]: import string
In [11]: com = 'ADFdiKL'
In [12]: com.translate(string.maketrans('ADFadf', 'XYZxyz'))
Out[12]: 'XYZyiKL'
Danke es hat funktioniert.
Dieser Code zählt in Perl das vorkommen von A oder a in einem String
aber leider weiss ich nicht wie man es in Python macht?
Dieser Code zählt in Perl das vorkommen von A oder a in einem String
Code: Alles auswählen
$a = ($ace =~ tr/Aa//);
Code: Alles auswählen
a = 0
for i in ace:
if i=='a':
a += 1
print a
the more they change the more they stay the same
jo stimmt, ist mir jetzt auch wieder eingefallen
Ergebnis:
Code: Alles auswählen
a = 'ich bIn ein StrIng'
print a.lower().count('i')
Code: Alles auswählen
>>> a = 'ich bIn ein StrIng'
>>> print a.lower().count('i')
4
>>> a
'ich bIn ein StrIng'
the more they change the more they stay the same
Wie würde der folgender Perl Code in Python aussehen?
Ausgabe:
Code: Alles auswählen
my ($x1, @model1) = split /\s+/, "AXDA .255 .245 .245 .255";
print $x1, "\n";
print @model1, "\n";
my ($x2, @model2) = split /\s+/, "CYEC .225 .275 .275 .225";
print $x2, "\n";
print @model2, "\n";
my @lod = map(lg($model1[$_]/$model2[$_]), (0..3));
print @lod, "\n";
my $a = "aagcaaatccgcgataaaattgccttggggcgtataaaagg";
$a =~ tr/acgtACGT/01230123/;
print $a, "\n";
my $score = sum(map($lod[$_], split //,$a));
print $score, "\n";
Code: Alles auswählen
AXDA
.255.245.245.255
CYEC
.225.275.275.225
0.180572245641821-0.166649869409451-0.1666498694094510.180572245641821
00210003112120300003321133222212303000022
1.15346400039175
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Das ist doch eine neue Frage. Lege dafür doch einen neuen Thread an. Aber es wäre schon schön, wenn du selbst etwas Eigeninitiative zeigst, statt andere den Perl-Code übersetzen zu lassen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Richtig. Wir sind hier kein Perl Forum. Probier es selbst und wenn du konkrete Fragen zu Python hast, kannst du die gerne hier stellen.
Bottle: Micro Web Framework + Development Blog