Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.
Toon posts:

[VB 2005] Regular Expression

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb de volgende code geschreven:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    Dim regExp As Regex
        Dim regExpMatch As Match
        Dim regEx1 As String
        Dim regEx2 As String
        Dim regEx3 As String
        Dim regEx4 As String
        Dim regEx5 As String

        Dim ready As Boolean = False

        regEx1 = "(?<one>[a-zA-Z0-9\-\+\&\. ]*)"
        regEx2 = "(?<two>\t*)"
        regEx3 = "(?<three>[a-zA-Z0-9\-\+\&\. ]*)"
        regEx4 = "(?<four>\n)"
        regEx5 = "(?<five>.*)"

        regExp = New Regex(regEx1 & regEx2 & regEx3 & regEx4 & regEx5)
        regExpMatch = regExp.Match(TextBox1.Text)

        If regExpMatch.Success Then
            TextBox2.Text = regExpMatch.Groups("one").ToString()
            TextBox3.Text = regExpMatch.Groups("three").ToString()
            TextBox1.Text = regExpMatch.Groups("five").ToString()
            'TextBox1.Text = regExpMatch.Groups("five").ToString()
        End If


Ik wil het volgende:

In tekstbox 1 staat de volgende tekst:

code:
1
2
Dit is een test.        EUR 100
Nog een test.


Tussen 'Dit is een test' en 'EUR 100' staan 2 tabs.

De bedoeling is dat in textbox2 'Dit is een test' wordt geplaatst en in textbox3 'EUR 100'.
Textbox1 moet dan alleen nog maar 'Nog een test' bevatten.

Het vreemde is dat op bovenstaande manier Textbox 1 wel wordt gevuld met 'Nog een test', maar de textboxes 2 en 3 zijn leeg.
Wanneer ik '\n' verander in '\n*' dan wordt textbox 2 gevuld met 'Dit is een test' en Textbox 3 met 'EUR 100'. Alleen is textbox 1 dan helemaal leeg.

Ik heb bovenstaand stukje nodig voor een omzetting in mijn applicatie, maar ik test het in bovenstaand stukje code.
Is er iemand die mij kan zeggen wat ik verkeerd doe? Ik ben hier al enige tijd mee bezig, maar ik kom er nog niet uit.

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Heb je al eens naar het interpreter design pattern gekeken. Regulieren expressies lijken mij niet de juiste oplossing.

If it isn't broken, fix it until it is..


Verwijderd

Topicstarter
Heb ik eerlijk gezegd nooit naar gekeken, maar dit moet toch op te lossen zijn met de RegEx. Voor mijn gevoel ben ik heel dicht bij de oplossing.

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Zou het niet iets moeten zijn dat je multiline-regexes aan moet zetten? Iets als:

code:
1
regExp.MultiLine = True


(dit is de eerste regel VB in m'n hele leven, heb het niet getest)

Verwijderd

Topicstarter
Deze optie bestaat niet en ik kan ook niets vinden wat er op lijkt. Zo te zien wordt wel multiline verwerkt, maar zit er toch een foutje in m'n regex.

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 13-12-2024
Verwijderd schreef op woensdag 06 augustus 2008 @ 11:28:
Deze optie bestaat niet en ik kan ook niets vinden wat er op lijkt. Zo te zien wordt wel multiline verwerkt, maar zit er toch een foutje in m'n regex.
De singleline EN de multiline optie bestaan beide in .NET regular expressions

http://msdn.microsoft.com....regexoptions(VS.80).aspx

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 31-10 11:58
Je kan je regex hier online testen. Volgens mij hoeven de (escaping?) backslashes er niet bij in de character set. En zoals je in de online tester kan zien is je eerste regex greedy waardoor hij direct dooreet tot en met "EUR 100".

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • compufreak88
  • Registratie: November 2001
  • Laatst online: 02-05 17:51
Ook een handige tool voor regular expressions is The Regex Coach. Die geeft on the fly aan wat er gematched wordt, en nog meer informatie.

Reuze handig als je aan het Regexpen bent. Je vindt die applicatie hier

  • Cousin Boneless
  • Registratie: Juni 2008
  • Laatst online: 28-02 12:55
Je moet er ook rekening mee houden dat een return vaak bestaat uit een combinatie van CR (carriage return) en LF (line feed). En de volgorde van deze letters verschilt per bron/omgeving. Dus soms LFCR en soms CRLF. In regex vindt je deze terug als \n en \r.
Volgens mij verklaart dit de uitkomst van jouw regex. Het eerste stuk (one, two en three) is optioneel en kan niet worden gematched wegens de aanwezigheid van een \r in de sequence \r\n. De match begint daarom bij de \n (four). Dus bevat alleen five een waarde.

Edit: je kan hier volgens mij ook beter werken met non greedy patterns. Heb je al die zooi in die character classes niet meer nodig.

[ Voor 11% gewijzigd door Cousin Boneless op 06-08-2008 21:04 ]


  • PolarBear
  • Registratie: Februari 2001
  • Niet online
Deze is ook handig, want gebruikt de .Net engine.
En zoals je in de online tester kan zien is je eerste regex greedy waardoor hij direct dooreet tot en met "EUR 100".
C#:
1
        regEx1 = "(?<one>[a-zA-Z0-9\-\+\&\. ]*?)" 

Uit m'n hoofd met een vraagteken achter de ster is hij niet meer greedy.
compufreak88 schreef op woensdag 06 augustus 2008 @ 12:44:
Ook een handige tool voor regular expressions is The Regex Coach. Die geeft on the fly aan wat er gematched wordt, en nog meer informatie.

Reuze handig als je aan het Regexpen bent. Je vindt die applicatie hier
Een gratis .Net tool is http://www.ultrapico.com/Expresso.htm
Pagina: 1