hallo welt!
momentan verwende ich:
'[Michael|Michaela] ist der Name für ([den|die]+ .*?)\. '
bei einem sinnlosen bsp text wie
"bla... Michaela ist der Name für die weibliche Person. Das Verwenden von Michael ist der Name für den Fehl-Treffer in diesem Fall mit der Nr.1, oder? bla. ..."
->"die weibliche Person" ist ein korrekter match
!->"den Fehl-Treffer in diesem Fall mit der Nr.1, oder?"... soll jedoch nicht herauskommen, da ein fragezeichen an stelle eines punktes als satzende/-zeichen auftritt,
(!-->und erst recht soll nicht "den Fehl-Treffer in diesem Fall mit der Nr", da nach dem Punkt ein Leerzeichen zu folgen hat, was mit dem genannten regexp bereits funktioniert)
wie berücksichtige ich matches, bei denen ein "?" einem punkt zuvorkommt? diese sollen nicht als treffer gezählt werden!
danke für vorschläge
reg. Ausdruck; Satzbegrenzung
[url=http://www.aktuell-online.info/]Aktuell-Online[/url][url=http://www.rsssuche.de/]by rabby[/url]
Hi!
'[he|Milca] ist der Name für ([|iden]+.*?)\.'
schreiben können, was sicherlich nicht dein ziel war.
joe
Den rest habe ich nicht verstanden. Aber obigen regexp hättest du auch alsrabby hat geschrieben:momentan verwende ich:
'[Michael|Michaela] ist der Name für ([den|die]+ .*?)\. '
'[he|Milca] ist der Name für ([|iden]+.*?)\.'
schreiben können, was sicherlich nicht dein ziel war.
joe
Was joe damit sagen wollte ist, das ``[wort]`` eine Zeichenklasse ist und keine Zeichenkette. So eine Zeichenklasse erkennt genau eines der angegebenen Zeichen, wobei die Reihenfolge in der die Zeichen in den eckigen Klammern angegeben werden, völlig egal ist. Mein Beispiel kann man also auch so schreiben ``[rotw]`` und es wird immer noch das gleiche erkannt.
Also musst Du erstmal aus den eckigen, runde Klammern machen. Und als erstes am besten noch ``?:`` reinschreiben, dann wird das in den Klammern nicht als Gruppe aufbewahrt sondern nur erkannt.
Problem Nummer 2, das erkennen von Zeichen ausser einem, oder mehreren, bestimmten Zeichen löst man dann mit einer Zeichenklasse. Die kann man nämlich auch negieren in dem man als erstes ein '^' schreibt. Ein beliebiges Zeichen ausser dem Fragezeichen kann man also so erkennen: '[^?]'.
Also musst Du erstmal aus den eckigen, runde Klammern machen. Und als erstes am besten noch ``?:`` reinschreiben, dann wird das in den Klammern nicht als Gruppe aufbewahrt sondern nur erkannt.
Problem Nummer 2, das erkennen von Zeichen ausser einem, oder mehreren, bestimmten Zeichen löst man dann mit einer Zeichenklasse. Die kann man nämlich auch negieren in dem man als erstes ein '^' schreibt. Ein beliebiges Zeichen ausser dem Fragezeichen kann man also so erkennen: '[^?]'.
Code: Alles auswählen
In [29]: a = "bla... Michaela ist der Name für die weibliche Person. Das Verwenden von Michael ist der Name für den Fehl-Treffer in diesem Fall mit der Nr.1, oder? bla. ..."
In [30]: r = re.compile(r'(?:Michael|Michaela) ist der Name für ((?:den|die) [^?]*?)\. ')
In [31]: r.findall(a)
Out[31]: ['die weibliche Person']
hi,
hätte da ein ähnliches problem. der gesuchte string ist auch von zwei strings umschlossen. und folgt auf den anfangsstring das wörtchen "nicht", so soll der treffer/match nicht gezählt werden.
also "abc ist nicht das gesuchte." => []
"abc ist schon das gesuchte." => ['schon das gesuchte']
thx
hätte da ein ähnliches problem. der gesuchte string ist auch von zwei strings umschlossen. und folgt auf den anfangsstring das wörtchen "nicht", so soll der treffer/match nicht gezählt werden.
also "abc ist nicht das gesuchte." => []
"abc ist schon das gesuchte." => ['schon das gesuchte']
thx