Regex Anfängerproblem,Group gibt nur das erste element zurüc

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.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Man kann auch einfach antworten: "Die Lösung deines speziellen Problems geht so-und-so. Wenn du das intensiver betreibst, würde ich jedoch zu Modul xyz raten - das ist auf Dauer viel einfacher." Oder, wenn schon einiges an Code da ist: "Guck mal, wie komplex das ist. Da blickt ja kaum einer durch. Schau mal, mit Modul xyz bekomme ich das in 2 Zeilen hin..."

Ich glaube einfach, es ist didaktisch sinnvoller, jemandem erst seine Frage möglichst zu beantworten und ihm dann einen alternativen Weg anzubieten, anstatt direkt mit dem erhobenen Zeigefinger zu kommen, unter der strengen Annahme, dass ein Anfänger niemals-nie überhaupt falschen Code sehen darf und man ihn bloß vor diesem Unheil bewahren muss. problembär ist natürlich der krasse Gegenpol von dieser Ansicht. Dies halte ich ebenfalls für wenig zielführend. Und sma hat ja zum Glück bereits gesagt, dass man seine Antwort ruhig mit einem Augenzwinkern betrachten sollte - puh...! ^^

//edit: Und natürlich hat deets anschaulich dargelegt, warum es in "ernsthaften" Anwendungsfällen besser ist, etwas robustes fertiges zu verwenden. Prinzipiell könnte man aber trotzdem zunächst den regulären Ausdruck für einen simplen Fall zeigen, danach auf mögliche Fallstricke hinweisen und sozusagen als Fazit dann die Nutzung eines speziellen Moduls empfehlen. Das soll jetzt natürlich keine direkte Handlungsanweisung sein. Ich kann sma's Einwände aber halt schon irgendwo verstehen...
Zuletzt geändert von snafu am Sonntag 5. Februar 2012, 20:51, insgesamt 1-mal geändert.
BlackJack

@snafu: Wenn Du den Leuten die Frage beantwortest, wie sie dynamische Namen mit angehängten Nummern erzeugt oder wie man etwas mit ``global`` oder `eval()` „löst”, dann muss man aber auch damit leben, dass die das dann tatsächlich *machen* und sich nicht um die saubere Alternative scheren.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@BlackJack: Nun ja. Wenn man zusätzlich argumentiert, *warum* Listen besser als das Durchnummerieren von Variablen sind, kann man vielleicht auch einfach mit seiner Überzeugungskraft wirken. Wenn ein Anfänger unbedingt bei seinem Codestil bleiben will, dann kann man eh nicht viel machen. Wieso sollte man auch? Er würde sich jedenfalls die von ihm gewünschte Antwort schon von irgendwo her holen.

Es gibt ja IMHO 2 Sorten bzw Reaktionsarten von Anfängern: Die einen nehmen das dankbar an und ermuntern indirekt zu weiteren Ratschlägen und die anderen haben so oder so keinen Bock drauf - sie wollen einfach nur, dass es irgendwie compil...äh...funktioniert. ;)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Finden wir den einen Konsens, wenn man sagt, dass ein Anfänger vor allem aus Unkenntnis der sinnvollen Möglichkeiten einen eher ungünstigen Weg einschlägt, bei dem es dann hakt?

Wenn ja, ist es doch eher hilfreich ihm diesen Weg aufzuzeigen; ich nehme mich da nicht aus und habe durch solche Hinweise hier viel gelernt.

Ob man jemanden davon abhalten sollte, einen ungünstigen Weg zu beschreiten... da bin ich ein wenig unschlüssig; wer sich ins Knie schießen will, soll das ruhig tun. Aber ich denke man darf ihn dann ruhig drauf hinweisen und im Idealfall begründen, wieso das ein schlechter Weg ist. Zumal eben auch anderen Leute einen solchen Thread ggf. finden und die sollten dann zumindest die Chance haben, den richtigen Weg einzuschlagen oder, sofern dieser nicht eindeutig bestimmbar ist, zumindest einen Überblick über die Alternativen und deren Vor- bzw. Nachteile zu erhalten.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich spreche natürlich davon, mögliche Gefahren von "anfängerfreundlichen" Code (im Sinne von: mit den Mitteln einer begrenzten Kenntnis des Sprachumfangs) auch direkt im selben Post zu erwähnen, sodass jemand, der 1 Jahr später den Thread findet, dies nicht erst auf Seite 3 erfährt. Das sollte aber eigentlich auch klar sein, denke ich.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

problembär hat geschrieben:Wenn also jemand HTML mit RegEx parsen möchte, sag' ich, "laß' ihn doch" und helfe ihm so gut ich kann dabei, daß es technisch auch klappt.
sma hat gezeigt, wie es geht[*]. Seinen Beitrag habe ich jedoch als tongue-in-cheek verstanden. Ich denke also nicht, dass er dem OP tatsächlich empfiehlt, HTML mittels regex zu parsen, da das offensichtlich erheblich komplizierter ist, als einfach einen fertigen HTML-Parser zu verwenden. Insbesondere für jemanden, der noch nicht gelernt hat, was greediness ist. Das Parsen von HTML ist ein bereits gelöstes Problem. Man braucht einfach nur faul zu sein. Faulheit ist beim Programmierer eine Tugend.

Überhaupt verhält es sich so, wie Jamie Zawinski schrieb: Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.

Desweiteren handelt es sich bei HTML um eine kontextsensitive Sprache, aber reguläre Ausdrücke eignen sich nur - der Name deutet es an - um reguläre Sprachen zu parsen. Beide Sprachen leben auf verschiedenen Ebenen der Chomsky-Hierarchie. Am überzeugendsten hat dies IMO bobince auf StackOverflow dargelegt.

Eine Möglichkeit zur Lösung des Problems des OPs wäre übrigens dies hier:

Code: Alles auswählen

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
for each in soup.findAll('description'):
    print each
Die Ausgabe ist dieselbe wie bei sma. Bei 4 XLOC, statt knapp 50.


[*]Der Parser von sma ist übrigens nicht wirklich in regex programmiert. Mit re zerlegt er nur den HTML-String in Tokens. Mithin handelt es sich um einen Scanner. Der Parser verwendet zwar diesen Scanner, aber er ist in Python programmiert.
In specifications, Murphy's Law supersedes Ohm's.
Antworten