[.NET] Regular Expressions replace, .ToUpper

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Remco
  • Registratie: Januari 2001
  • Laatst online: 24-09 16:41
Ik zit nu al de hele middag te knoeien en zoeken om door middel van reg. exp. een string om te zetten naar Uppercase.
Ik wil dit doen d.m.v. reg. exp. en niet door bijvoorbeeld .ToUpper in VB.Net
Ik weet dat het mogelijk is, maar ik kan het niet vinden. Wellicht zie ik even door het bos de bomen niet meer, maar wie kan mij iets verder helpen ? Om nu gewoon $0> in een regex.replace te doen werkt niet.

Doel is bijvoorbeeld om de postcode
1234ab
om te zetten naar
1234 AB

The best thing about UDP jokes is that I don't care if you get them or not.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik ben érg benieuwd waarom .ToUpper niet voldoet en waarom je in hemelsnaam via een regexp wil werken eigenlijk :X
edit:
Ah, je wil méér dan ToUpper ;)

[ Voor 15% gewijzigd door RobIII op 10-12-2008 17:12 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 25-09 22:31

CoolGamer

What is it? Dragons?

Waarom haal je niet met behulp van regular expressions het cijfer deel en het letter deel apart en voeg je het weer samen zodat het er uit ziet als jij wilt?

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


Acties:
  • 0 Henk 'm!

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 08:59
Waarom niet zoiets? (ff snel geklopt, waarschijnlijk niet precies wat je wilt)

C#:
1
2
3
4
Console.WriteLine(Regex.Replace("1234ab", @"(\d{4})\s{0,1}([A-z]{2})", new MatchEvaluator(delegate(Match m){
  return string.Format("{0} {1}", m.Groups[1].Value, m.Groups[2].Value.ToUpper());
})));
Console.ReadLine();

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Stel je wil in een text alle mogelijk valide postcodes opmaken, dan zou ik die code iets aanpassen:
C#:
1
2
3
//Formaat postcode sinds 2005
Console.WriteLine(Regex.Replace("1234ab", @"([1-9]\d{3})\s*([A-Z]{2}(?<!S[ADS]))",
    m => m.Groups[1] + " " + m.Groups[2].Value.ToUpper(), RegexOptions.IgnoreCase));

Hoewel je misschien beter een iets ruimere definitie kan nemen (incl SS/SA/SD).

Maar als het er maar om 1 gaat, die je ook wil valideren, dan kom je al snel bij Match uit.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • ik222
  • Registratie: Maart 2007
  • Niet online
/edit: laat maar

[ Voor 96% gewijzigd door ik222 op 10-12-2008 18:22 . Reden: niet goed gelezen ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
pedorus schreef op woensdag 10 december 2008 @ 18:15:
Stel je wil in een text alle mogelijk valide postcodes opmaken, dan zou ik die code iets aanpassen:
C#:
1
2
3
//Formaat postcode sinds 2005
Console.WriteLine(Regex.Replace("1234ab", @"([1-9]\d{3})\s*([A-Z]{2}(?<!S[ADS]))",
    m => m.Groups[1] + " " + m.Groups[2].Value.ToUpper(), RegexOptions.IgnoreCase));

Hoewel je misschien beter een iets ruimere definitie kan nemen (incl SS/SA/SD).

Maar als het er maar om 1 gaat, die je ook wil valideren, dan kom je al snel bij Match uit.
En dan is nog de vraag of je wel wil valideren of enkel formatteren; daarbij (maar da's persoonlijk) zou ik dan voor een generieke [A-Z]{2} gaan en die gekke uitzonderingen lekker laten boeien. Dan hoef ik mijn app niet aan te passen als 1 of andere instantie 't in z'n kop haalt doch die uitzonderingen maar weer te gaan gebruiken :P

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
RobIII schreef op woensdag 10 december 2008 @ 18:20:
[...]

En dan is nog de vraag of je wel wil valideren of enkel formatteren; daarbij (maar da's persoonlijk) zou ik dan voor een generieke [A-Z]{2} gaan en die gekke uitzonderingen lekker laten boeien. Dan hoef ik mijn app niet aan te passen als 1 of andere instantie 't in z'n kop haalt doch die uitzonderingen maar weer te gaan gebruiken :P
Gelukkig heb ik geen postcode met F, I, O, Q, U of Y erin, die zijn er pas sinds 2005 ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Remco
  • Registratie: Januari 2001
  • Laatst online: 24-09 16:41
TheCoolGamer schreef op woensdag 10 december 2008 @ 17:20:
Waarom haal je niet met behulp van regular expressions het cijfer deel en het letter deel apart en voeg je het weer samen zodat het er uit ziet als jij wilt?
Dat kan wat betreft de postcode. De postcode is maar een voorbeeld.
Ongeacht wat of wie, ik wil gewoon een string naar uppercase.
Daspeed schreef op woensdag 10 december 2008 @ 18:01:
Waarom niet zoiets? (ff snel geklopt, waarschijnlijk niet precies wat je wilt)

C#:
1
2
3
4
Console.WriteLine(Regex.Replace("1234ab", @"(\d{4})\s{0,1}([A-z]{2})", new MatchEvaluator(delegate(Match m){
  return string.Format("{0} {1}", m.Groups[1].Value, m.Groups[2].Value.ToUpper());
})));
Console.ReadLine();
Waarom niet zoiets ? Nou, ik wil het met reg. exp. doen, en niet met .Net code.
In bovenstaande code is de replace een .Net functie namelijk .ToUpper
RobIII schreef op woensdag 10 december 2008 @ 17:09:
Ik ben érg benieuwd waarom .ToUpper niet voldoet en waarom je in hemelsnaam via een regexp wil werken eigenlijk :X
edit:
Ah, je wil méér dan ToUpper ;)
Uiteindelijk gaat het om een maatwerk applicatie die we niet zelf hebben geschreven of kunnen beheren.
Wat we wel kunnen doen zijn 2 dingen (nog wel meer, maar dat is niet van belang):
  1. 1. Wij kunnen een check doen op een invoerveld op basis van RegEx.match
  1. 2. Wij kunnen een invoerveld vervangen door een andere waarde op basis van RegEx.replace
Nu zijn er natuurlijk onnoemelijk veel velden, pagina's etc... Waar wij in sommige gevallen een check op willen doen. Dit zijn checks die voor de buitenwereld vreemd zijn, dus ik pak maar even een postcode als voorbeeld.
Dit invoer kan zijn 1234ab, maar dit moet door RegEx.replace omgezet worden naar 1234 AB.
Nu lukt mij alles wel redelijk, maar een string naar .ToUpper brengen krijg ik niet voor elkaar.

Dus als iemand dat weet _/-\o_

The best thing about UDP jokes is that I don't care if you get them or not.


Acties:
  • 0 Henk 'm!

  • Ruudjah
  • Registratie: November 1999
  • Laatst online: 06-09 20:58

Ruudjah

2022

RegexBuddy to the rescue! Regex is de draak, RegexBuddy temt het. Ik begrijp verder uit je verhaal dat je dus geen .NET code kan schrijven? Zo niet, wat heeft .NET verder met dit topic te maken? Overigens leerde me minder dan 120 seconden Visual studio & google me jouw oplossing.

[ Voor 10% gewijzigd door Ruudjah op 10-12-2008 20:15 ]

TweakBlog


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Ruudjah schreef op woensdag 10 december 2008 @ 20:14:
Zo niet, wat heeft .NET verder met dit topic te maken?
Regex heeft meerdere dialecten :)
Overigens leerde me minder dan 120 seconden Visual studio & google me jouw oplossing.
Welke oplossing? Voor het probleem van TS bestaat er niet echt een oplossing volgens mij, behalve 26x een replace doen :)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • Remco
  • Registratie: Januari 2001
  • Laatst online: 24-09 16:41
Ruudjah schreef op woensdag 10 december 2008 @ 20:14:
RegexBuddy to the rescue! Regex is de draak, RegexBuddy temt het. Ik begrijp verder uit je verhaal dat je dus geen .NET code kan schrijven? Zo niet, wat heeft .NET verder met dit topic te maken? Overigens leerde me minder dan 120 seconden Visual studio & google me jouw oplossing.
Zoals ik al aangaf zal de Regex door een C# applicatie middels een regex.replace en regex.match verder verwerkt worden. Ik moet dus wel het juiste "dialect" aangeven.

Als het je binnen 120 seconden lukt, kan je me dan in 3 seconden de goede richting op duwen ?

[ Voor 0% gewijzigd door Remco op 11-12-2008 20:46 . Reden: typo ]

The best thing about UDP jokes is that I don't care if you get them or not.


  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Wacht ff, wil je nou dat een regular expression een toUpper-achtige operatie op je input gaat toepassen? Ik heb geen verstand van .Net, maar het lijkt me onwaarschijnlijk dat de regexp implementatie daar zelf functionaliteit voor heeft, die matcht alleen maar zaken. Vervolgens bepaal jij hoe je de matches processed, waarbij de regexp je handles geeft naar de orginele input en de matches zelf.

De oplossing met een MatchEvaluator lijkt me toch goed bruikbaar? Zo niet, geef dan eens aan waarom niet?

[ Voor 6% gewijzigd door Herko_ter_Horst op 11-12-2008 20:56 ]

"Any sufficiently advanced technology is indistinguishable from magic."


  • Remco
  • Registratie: Januari 2001
  • Laatst online: 24-09 16:41
Herko_ter_Horst schreef op donderdag 11 december 2008 @ 20:53:
Wacht ff, wil je nou dat een regular expression een toUpper-achtige operatie op je input gaat toepassen? Ik heb geen verstand van .Net, maar het lijkt me onwaarschijnlijk dat de regexp implementatie daar zelf functionaliteit voor heeft, die matcht alleen maar zaken. Vervolgens bepaal jij hoe je de matches processed, waarbij de regexp je handles geeft naar de orginele input en de matches zelf.
http://www.google.nl/sear...official&client=firefox-a

The best thing about UDP jokes is that I don't care if you get them or not.


  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Leuk zo'n lijst links. En dan?

Ok, er zijn dus blijkbaar regexp implementaties die wel een uppercase of lowercase operator hebben voor de replacement expressie. (Als dat de bedoeling was van die Google link, zeg dat dan op een normale manier...)

In C# is die mogelijkheid er bijkbaar niet (ik neem aan dat je dat geprobeerd hebt?). C# heeft in elk geval die generiekere oplossing waarbij je via de MatchEvaluator elke willekeurige transformatie op een match los kunt laten. Waarom voldoet die niet?

[ Voor 17% gewijzigd door Herko_ter_Horst op 11-12-2008 22:10 ]

"Any sufficiently advanced technology is indistinguishable from magic."


Acties:
  • 0 Henk 'm!

  • Remco
  • Registratie: Januari 2001
  • Laatst online: 24-09 16:41
Herko_ter_Horst schreef op donderdag 11 december 2008 @ 22:06:
Leuk zo'n lijst links. En dan?

Ok, er zijn dus blijkbaar regexp implementaties die wel een uppercase of lowercase operator hebben voor de replacement expressie. (Als dat de bedoeling was van die Google link, zeg dat dan op een normale manier...)
Ik snap wat je bedoelt, maar bijna alle reacties zijn gebaseerd op het verkeerd/niet goed lezen van de ts. Als ik dan een juiste reactie zou geven, zou dit een copy zijn van mijn ts.
En zoals je ziet in google kan je zelf uitzoeken welke site je wilt gebruiken om de replace functie te bestuderen.....

[ Voor 9% gewijzigd door Remco op 12-12-2008 09:30 ]

The best thing about UDP jokes is that I don't care if you get them or not.

Pagina: 1