[python / regex] repeatende substring catchen

Pagina: 1
Acties:

  • Quadro!
  • Registratie: Maart 2004
  • Laatst online: 13-02 16:14
Onder het motto, een stukje code zegt meer dan 1000 woorden:
code:
1
2
3
4
5
6
7
8
9
>>> str = "abcd asd df df sadf asdfie dfdslkfjd eij sdof dd"
>>> p = re.compile('abcd( [a-z]+)+')
>>> p.search(str).group(0)
'abcd asd df df sadf asdfie dfdslkfjd eij sdof dd'
>>> p.search(str).group(1)
' dd'
>>> p.findall(str)
[' dd']
>>>


Bovenstaand stukje is een stukje gepruts van mij met de interactieve mode van python ( _/-\o_ ). Anyway: waar het hier dus om gaat is: ik heb een stukje "abcd" met iets erachter wat met enige regelmaat terugkomt. Nu wil ik echter elk afzonderlijk stukje (wat zich met enige regelmaat herhaald) "( [a-z]+)" hebben, hoe kan ik die verkrijgen? Ik heb al een hele tijd lopen zoeken en ik kom er maar niet achter. Zie ik nu iets over het hoofd of ..?

[ Voor 3% gewijzigd door Quadro! op 15-08-2006 23:49 ]


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Dus je wil alle stukjes die terugkeren na de abcd vinden? Of wil je alleen weten hoe vaak het stukje na abcd terugkeert in de hele string? Kan je een voorbeeld geven van je gewenste output?

Rustacean


  • Quadro!
  • Registratie: Maart 2004
  • Laatst online: 13-02 16:14
Gewenste output zou zijn:
code:
1
[' asd',' df',' df',' sadf', etc...]


Ik wil dus elk afzonderlijk stukje als een item in een list krijgen.

[ Voor 31% gewijzigd door Quadro! op 16-08-2006 00:14 ]


  • terabyte
  • Registratie: September 2001
  • Laatst online: 06-07-2025

terabyte

kan denken als een computer

Quadropluxor schreef op woensdag 16 augustus 2006 @ 00:14:
Gewenste output zou zijn:
code:
1
[' asd',' df',' df',' sadf', etc...]


Ik wil dus elk afzonderlijk stukje als een item in een list krijgen.
>>> str = "abcd asd df df sadf asdfie dfdslkfjd eij sdof dd"
>>> str.split()
['abcd', 'asd', 'df', 'df', 'sadf', 'asdfie', 'dfdslkfjd', 'eij', 'sdof', 'dd']
>>> str.split()[1:]
['asd', 'df', 'df', 'sadf', 'asdfie', 'dfdslkfjd', 'eij', 'sdof', 'dd']
>>>


?


>>> import re
>>> p = re.compile(r'( [a-z]+)')
>>> p.findall(str)
[' asd', ' df', ' df', ' sadf', ' asdfie', ' dfdslkfjd', ' eij', ' sdof', ' dd']


??

[ Voor 14% gewijzigd door terabyte op 16-08-2006 00:26 ]


  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Volgens mij is het zo dat een matcher niet alle matches onthoudt, maar slechts de laatste die er nog aan voldeed, in dit geval dus " dd". Dit is in java zo iig het geval... en ik denk dat het hier ook wel 's voor op zou kunnen gaan ;) Pin me er niet op vast though, geen python expert enzo ;)

  • Quadro!
  • Registratie: Maart 2004
  • Laatst online: 13-02 16:14
Dank terabyte voor het me op weg helpen, mijn creativiteit was even heeeeeel ver weg. De situatie waarin ik het bovenstaande toepas is even iets anders, maar wel heel sterk vergelijkbaar en dit is even een stuk leesbaarder. In mijn andere situatie werkt gewoon "split" niet, maar ik kan daar wel op een regex splitten.

Probleem is dus opgelost door eerst alles na "abcd" in een substring te catchen en daar vervolgens een split op los te laten.

  • DeMoN
  • Registratie: Maart 2001
  • Laatst online: 06-01 23:13

DeMoN

Pastafari

Check anders ook dit progje eens uit:
http://kodos.sf.net
Werkt erg goed hiervoor :)

Gamertag: Cosmicv0id
"Het woord Gods is voor mij niets meer dan een expressie en het product van menselijke zwakheid. De Bijbel is een verzamelwerk van legendes die achtenswaardig zijn maar ook primitief en kinderachtig.'' - Albert Einstein


  • Quadro!
  • Registratie: Maart 2004
  • Laatst online: 13-02 16:14
wow, dat is zeker een fijn programma! :9
Pagina: 1