07. december 2005 - 15:58
Der er
18 kommentarer
erstat 'a' men ikke '?a'
Hej Hvordan laver man en replace der erstatter '=' med 'eq' men ikke '?='. Altså hvis jeg har teksten 'a = b and b ?= c' vil jeg gerne ende op med 'a eq b and b ?= c' Gerne vha C# Regex.Replace(...)
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
07. december 2005 - 18:39
#1
Hvis du er sikker på at der er mellemrum rundt om dit " = " så kan det klares ret simpelt ved at er statte " = " med " eq ".
07. december 2005 - 18:46
#2
Og, hvis du ikke kan være sikker på om mellemrummene er der eller ej: using System; using System.Text.RegularExpressions; namespace e670391 { class Class1 { [STAThread] static void Main(string[] args) { string indData = "a = b and b ?= c"; Regex RE = new Regex(@"([^?])(=)"); string udData = RE.Replace(indData, @"$1eq"); Console.WriteLine(udData); } } }
07. december 2005 - 19:07
#3
Men hvis der står string indData = "a= b and b ?= c"; så virker det ikke. Det er bedre med: Regex RE = new Regex(@"(?<!\?)(= ?)"); string udData = RE.Replace(indData, @" eq ");
07. december 2005 - 19:16
#4
Godt nok bliver "a= b" til "a eq b", men "a = b" bliver så samtidigt til "a eq b" hvor der er 2 mellemrum mellem 'a' og "eq".
07. december 2005 - 19:21
#5
Og det reparerer man så på, hvis man synes man gider ;) Regex RE = new Regex(@"((?<!\?)| )(= ?)");
07. december 2005 - 19:22
#6
using System; using System.Text.RegularExpressions; namespace e670391 { class Class1 { [STAThread] static void Main(string[] args) { string indData = "a = b and b ?= c"; Regex RE = new Regex(@"([^?]) *(=)"); string udData = RE.Replace(indData, @"$1 eq"); Console.WriteLine(udData); } } }
07. december 2005 - 19:22
#7
Og lad os spare på parenteserne: Regex RE = new Regex(@"((?<!\?)| )= ?");
07. december 2005 - 19:24
#8
... eller (inkl. sparing af parenteser ;^): using System; using System.Text.RegularExpressions; namespace e670391 { class Class1 { [STAThread] static void Main(string[] args) { string indData = "a = b and b ?= c"; Regex RE = new Regex(@"([^?]) {0,1}="); string udData = RE.Replace(indData, @"$1 eq"); Console.WriteLine(udData); } } }
07. december 2005 - 19:25
#9
... og uden de (nu) overflødige @-tegn: using System; using System.Text.RegularExpressions; namespace e670391 { class Class1 { [STAThread] static void Main(string[] args) { string indData = "a = b and b ?= c"; Regex RE = new Regex("([^?]) {0,1}="); string udData = RE.Replace(indData, "$1 eq"); Console.WriteLine(udData); } } }
07. december 2005 - 19:26
#10
string indData = "a =b and b ?= c";
07. december 2005 - 19:28
#11
Sjov opgave ;^) using System; using System.Text.RegularExpressions; namespace e670391 { class Class1 { [STAThread] static void Main(string[] args) { string indData = "a =b and b ?= c"; Regex RE = new Regex("([^?]) {0,1}= {0,1}"); string udData = RE.Replace(indData, "$1 eq "); Console.WriteLine(udData); } } }
07. december 2005 - 19:32
#12
{0,1} er det samme som ? Lad os nu se hvad spørgeren synes ... *g*
07. december 2005 - 19:33
#13
Doh! ... *G*
07. december 2005 - 19:41
#14
Og skal jeg drille dig lidt imens, hvad så hvis det står først (ok, nok ikke relevant her) string indData = "=b and b ?= c"; Dit [...] fylder altid eet tegn, mens mit (?<!...) fylder 0 tegn
07. december 2005 - 19:42
#15
07. december 2005 - 20:00
#16
Ok så... denne klare da også tilfældet hvor at =-tegent er fremme i front: using System; using System.Text.RegularExpressions; namespace e670391 { class Class1 { [STAThread] static void Main(string[] args) { string indData = "a = b and b ?= c"; Regex RE = new Regex(@"(?<!\?) ?= ?"); string udData = RE.Replace(indData, " eq "); Console.WriteLine(udData); } } } - men jeg er ikke vild med at der så kommer et mellemrum før eq: "= b and b ?= c" -> " eq b and b ?= c" En anden drillepind: Hvad hvis der kan stå "=="? Tag den! ;^)
07. december 2005 - 20:05
#17
Jeg har altså ikke tid til at lege mere, nielle *G* - men vi nærmer os da et eller andet. Sådan et malplaceret " " kan man nok få fjernet, hvis det skal være. Sidste bud, foreløbig: string indData = "a==b and b ?= c and h= d"; Regex RE = new Regex(@"((?<!\?)| )==? ?"); string udData = RE.Replace(indData, @" eq ");
11. december 2005 - 19:39
#18
Hvad med noget respons?
Kurser inden for grundlæggende programmering