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
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