Toon posts:

Reguliere expressie voor lidwoorden en leestekens

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hallo iedereen,
...
Ik zoek een bepaalde .NET reguliere expressie voor onderstaande tekst.

De bedoeling is een reguliere expressie te vormen die in de inputstring alle
zinnen matcht waarin het woord "de" of "het" minstens 2 keer voorkomt!
We gaan er van uit dat de eerste letter in de zin een HOOFDLETTER moet zijn...
Het lidwoord zelf kan voorkomen in hoofdletters of kleine letters.

Een zin wordt niet perse afgesloten door een newline, wel steeds door een
leesteken! Dit leesteken kan een punt, uitroep- of vraagteken (of combinatie) zijn.
De vraag die je je kan stellen is of we de zin ZO kunnen beeindigen?! Ja hoor,
het combineren leidt ook tot het (goede) resultaat leiden!!!! We veronderstellen
dat de zin zelf, naast afsluitend leesteken, overige punten, uitroep- of vraagtekens
zal bevatten.

Whitespaces tussen 2 regels maken geen deel uit van een of andere zin.

Ik maak gebruik van .NET regex tester.
...

Na een hele tijd zoeken ben ik tot deze expressie gekomen
(?<word>(\b(D(e|E)|H(et|ET)\b)))[^.!?]+?\b\k<word>\b[^.!?]*?[.!?]+

Maar ik krijg geen enkel outputresultaat of matches. Wat ik zeer vreemd.

Weet er iemand de juiste expressie hiervoor?

Groeten
Tom
...

Alle reacties


Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 09-10 13:33
Ik werk nooit met MS spul, maar kun je niet veel simpeler het aantal keer dat een regex matcht tellen? Bijvoorbeeld zo:

code:
1
2
3
4
string str = "The foxy fox jumps before dancing the Foxtrot.";

// Make search case-insensitive with optional third argument:
int fCount = Regex.Matches(str, "fox", RegexOptions.IgnoreCase).Count;


Moet je alleen "fox" even veranderen in een regex die "de" of "het" matcht als heel woord *. Die IgnoreCase handelt je hoofdletter probleem af.

* iets als "\b(de)|(het)\b" lijkt me, met of zonder haken.

[ Voor 24% gewijzigd door Morrar op 03-12-2016 10:25 ]


Acties:
  • 0 Henk 'm!

  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Hoe goed moet je regex gaan werken? Heb je alleen standaardzinnen met Latijnse karakters, of krijg je ook te maken met andere charactersets? In dat laatste geval is /b sowieso geen oplossing, want dan ga je heel veel niet fatsoenlijk kunnen matchen.

In plaats van (D(e|E)) en (H(et|ET)), waarom doe je niet gewoon een case insensitive match? (want nu match 'de' en 'het' ook niet)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het is enkel op deze tekst. Is de syntax in het begin en het einde juiste met word? Hoe doe ik dat een case insenitive match?

Acties:
  • +1 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 08-10 23:48

Ventieldopje

I'm not your pal, mate!

Klinkt als een schoolopdracht, hmm. :Y)

Maar in plaats van het in C# te kloppen en te testen, probeer het on-the-fly uit met bijv. Expresso of RegExr :)

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • Moyue83
  • Registratie: December 2016
  • Laatst online: 19-10-2019

Moyue83

<script>alert(1)

keep it simple zou ik zeggen:

^.*( de | een | het )+.*( de | een | het )+.*$

check de spaties achter de lidwoorden. ( getest in notepad++ waar hij niet valt over upper/lowercase )
afhankelijk van de taal die je gebruikt kan dit verschillen.

<script>alert(1)</script>

Pagina: 1