Toon posts:

[C#/Regex] Case insensitive regex, sensitive replace

Pagina: 1
Acties:
  • 111 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hi,

Ik heb een simpele reguliere expressie in C#

\b(?:klant)\b

Nu kan het zijn dat er het woord Klant en klant kan voorkomen in een string. Een begin van een zin, begint natuurlijk met een hoofdletter.

Als het woord klant (case-insensitive) gevonden wordt, is het mogelijk om deze dan te vervangen zoals het woord is gevonden? Dus beginnend met hoofd of kleine letter?

Alvast bedankt.

Groetjes,
Statix

  • WormLord
  • Registratie: September 2003
  • Laatst online: 01-12 13:49

WormLord

Devver

Ehm...
- Waar zit je in te zoeken?
- Wat word er vervangen en door wat?
- Heb je ook al wat C#-code om die reguliere expressie heen?
- Gaat er nu iets mis met die code?

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Met $1, $2 in je replace with parameter kun je aangeven dat je de eerste, tweede etc match uit je basis string wilt gebruiken. Deze wordt as-is overgenomen, dus met dezelfde casing en dergelijke. Met deze hint en eventueel deze pagina:
http://www.windowsdevcenter.com/pub/a/oreilly/windows/news/csharp_0101.html
moet je eruit kunnen komen. Anders even googlen op replace, c# en regular expressions.

Verwijderd

Topicstarter
Wat ik zoek is een regex die hoofdletter ongevoelig is, maar afhankelijk van het woord wat gevonden is, met hoofdletter of kleine letter wordt vervangen voor het vervangsel.

Als ik klant vervangen wil voor aap, of whatever dan als volgt:

"Deze klant is top" zou moeten worden "Deze aap is top"
"Klant nummer 10 is dood" zou moeten worden "Aap nummer 10 is dood"

Case preserving replacement is de engelse omschrijving?

Verwijderd

Topicstarter
Is het uberhaupt mogelijk wat ik wil, met reguliere expressies?

  • TargetX
  • Registratie: November 2005
  • Laatst online: 18-11 10:37
Misschien een heel stom idee maar kun je niet gewoon 2 x een regex erop los laten: een keer waarmee je klant vervangt door aap en een tweede keer waarmee je Klant vervangt door Aap? Lijkt mij de makkelijkste oplossing...

edit: probeer ook alleen maar te helpen hoor :(

[ Voor 10% gewijzigd door TargetX op 20-02-2007 13:31 ]


Verwijderd

Topicstarter
TargetX schreef op dinsdag 20 februari 2007 @ 13:24:
Misschien een heel stom idee maar kun je niet gewoon 2 x een regex erop los laten: een keer waarmee je klant vervangt door aap en een tweede keer waarmee je Klant vervangt door Aap? Lijkt mij de makkelijkste oplossing...
Daar gaat het niet om nu. Dat is een oplossing die, bij wijze van, die aap ook kan bedenken. Nee, maar in geval er, ik noem maar wat 40 regexen moeten worden uitgevoerd, zullen dit er dus 80 moeten worden.

Loopt dus hard op na een tijdje.

Edit: Weet ik TargetX :> Ik apprecieer het zeker ook, maakte een grapje. De werkelijke reden heb ik daarom ook achter gezet.

[ Voor 10% gewijzigd door Verwijderd op 20-02-2007 14:00 ]


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Ah okee, je wilde het zo. Ik dacht dat je misschien iets wilde in de zin van "Klant" vervangen door "<strong>Klant</strong>". Wat te simpel gedacht dus :) .

Ik vrees dat het dan inderdaad zo zal moeten zijn zoals TargetX voorstelt. Maar mijn kennis van reguliere expressies is verre van volledig, dat moet ik er dan wel bij vertellen.

Verwijderd

Topicstarter
Ik ben nu aan het spelen, met een soort gelijke functie als in PHP preg_replace_callback heet.

Met een MatchEvoluator =)

Laat het weten als ik eruit ben.

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 27-11 10:50

_Thanatos_

Ja, en kaal

C#:
1
2
3
4
5
6
7
8
string output = Regex.Replace(
   input,
   "klant",
   delegate(Match m) {
      return PreserveCase(m.Value, "aap");
   },
   RegexOptions.IgnoreCase
);

Ofzo? PreserveCase moet je dan zelf maar verzinnen ;)

Die inline delegate is vanaf C# 2.0 mogelijk, in C# 1.0 moet je em als method definiëren.

日本!🎌

Pagina: 1