[Regexp] selectief whitespace characters uitfilteren

Pagina: 1
Acties:

  • Kman
  • Registratie: April 2000
  • Laatst online: 21-01 15:40
Hallo allemaal!

Ik zoek naar een manier om middels een regular expression whitespace characters (tabs, spaties) te matchen die voor de eerstgevonden non-whitespace characters staan.

Bijvoorbeeld in onderstaande string:
                  System.out.println("ladieda");       

wil ik alle tabs, spaties e.d. hebben die voor de System.out statement staan, maar niet diegene die achter het statement staan.

De implementatie hiervan gebeurd in Java. Hierin is het mogelijk om whitespace characters te matchen met \s. Maar die zal alle gevonden tabs en spaties vinden, ook die wat achter het System.out statement staat.

Hoe kan ik met regular expressions aangeven dat alle tabs en spaties worden gematcht, totdat er een non-whitespace character wordt gevonden?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

In PCRE staat ^ voor het begin van een regel, en $ voor het einde. Kun je dat niet gebruiken?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 12-02 12:22
Java regex:

code:
1
^\s*(?=\S)


Vanaf het begin van de regel alle whitespacegevolgd door een NIET whitespace karakter. De NIET whitespace wordt gematched met een positive lookahead, lookarounds zijn NON capturing.

http://java.sun.com/j2se/...a/util/regex/Pattern.html

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Die lookahead lijkt me niet nodig, zolang je regexp greedy is? :) Heck, zelfs als ie niet greedy is moet het nog goed gaan zonder lookahead. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Kman
  • Registratie: April 2000
  • Laatst online: 21-01 15:40
De lookahead was inderdaad de oplossing _/-\o_ Bedankt!!

En @ -NME-, volgens mij kan dit ook niet op een andere manier. Aangezien je 2 reeksen van dezelfde typen karakters hebt (de whitespace chars), zijn ze volgens mij niet apart van elkaar te isoleren zonder lookarounds. Misschien dat middels een trucje met groups nog wat uitgehaald kan worden, maar dat is mij in ieder geval nog niet gelukt.

  • tweakerbee
  • Registratie: Maart 2000
  • Laatst online: 12-02 02:38

tweakerbee

dus..?

Werkt
code:
1
^[\s]*

niet gewoon?

(Net getest en hier werkt ie.) Zou de voorkeur verdienen omdat ie ws. sneller is dan met een lookaround.

[ Voor 56% gewijzigd door tweakerbee op 20-07-2006 15:53 ]

You can't have everything. Where would you put it?


  • Kman
  • Registratie: April 2000
  • Laatst online: 21-01 15:40
I stand corrected :) Thx!

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

tweakerbee schreef op donderdag 20 juli 2006 @ 15:52:
Werkt
code:
1
^[\s]*

niet gewoon?

(Net getest en hier werkt ie.) Zou de voorkeur verdienen omdat ie ws. sneller is dan met een lookaround.
Zelfs zonder character class...
code:
1
^\s*

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Dat zeg ik: zonder lookahead dus. :P Die lookahead is erg overbodig hier. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • tweakerbee
  • Registratie: Maart 2000
  • Laatst online: 12-02 02:38

tweakerbee

dus..?

*kuch* we zitten wel een beetje te prutsen met z'n allen (uitgezonderd -NMe-)

You can't have everything. Where would you put it?


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 12-02 12:22
Ik was inderdaad Mr. Greedy vergeten. :P
Door die lookahead match je expliciet op een whitespace reeks gevolgd door een nog whitespace karakter. Maar vanwege greedy is het inderdaad overbodig.

[ Voor 15% gewijzigd door The - DDD op 21-07-2006 10:44 ]

Pagina: 1