Avatar billede sk-man Nybegynder
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(...)
Avatar billede nielle Nybegynder
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 ".
Avatar billede nielle Nybegynder
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);
        }
    }
}
Avatar billede erikjacobsen Ekspert
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 ");
Avatar billede nielle Nybegynder
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".
Avatar billede erikjacobsen Ekspert
07. december 2005 - 19:21 #5
Og det reparerer man så på, hvis man synes man gider ;)

            Regex RE = new Regex(@"((?<!\?)| )(= ?)");
Avatar billede nielle Nybegynder
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);
        }
    }
}
Avatar billede erikjacobsen Ekspert
07. december 2005 - 19:22 #7
Og lad os spare på parenteserne:

      Regex RE = new Regex(@"((?<!\?)| )= ?");
Avatar billede nielle Nybegynder
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);
        }
    }
}
Avatar billede nielle Nybegynder
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);
        }
    }
}
Avatar billede erikjacobsen Ekspert
07. december 2005 - 19:26 #10
string indData = "a =b and b ?= c";
Avatar billede nielle Nybegynder
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);
        }
    }
}
Avatar billede erikjacobsen Ekspert
07. december 2005 - 19:32 #12
{0,1} er det samme som ?

Lad os nu se hvad spørgeren synes ... *g*
Avatar billede nielle Nybegynder
07. december 2005 - 19:33 #13
Doh! ... *G*
Avatar billede erikjacobsen Ekspert
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
Avatar billede erikjacobsen Ekspert
07. december 2005 - 19:42 #15
Avatar billede nielle Nybegynder
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! ;^)
Avatar billede erikjacobsen Ekspert
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 ");
Avatar billede nielle Nybegynder
11. december 2005 - 19:39 #18
Hvad med noget respons?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester