Avatar billede joki Mester
21. oktober 2024 - 08:36 Der er 7 kommentarer og
1 løsning

Regex

Hej

Hvordan kan jeg hente f.eks. 1-4 grupper af sammenhængende karakterer ud i en streng ?

Input : "Jeg tester c#, fordi det er mandag."

Output (1-4) : "Jeg tester c#, fordi"
Output (4-7) : "fordi det er mandag."
Avatar billede arne_v Ekspert
21. oktober 2024 - 15:07 #1
Hvad bestemmer at der skal være et ords overlap "fordi"?
Avatar billede joki Mester
21. oktober 2024 - 16:25 #2
der er ikke overlap det er bare i eksemplet
Avatar billede arne_v Ekspert
21. oktober 2024 - 16:48 #3

using System;
using System.Text.RegularExpressions;

namespace RegexFun
{
    public class Program
    {
        private static readonly Regex re = new Regex("[^ ]+( [^ ]+)?( [^ ]+)?( [^ ]+)?");
        public static void Main(string[] args)
        {
            String s = "Jeg tester c#, fordi det er mandag.";
            foreach(Match m in re.Matches(s))
            {
                Console.WriteLine(m.Value);
            }
        }
    }
}


outputter:

Jeg tester c#, fordi
det er mandag.

Det er grupper af 4 mellemrums adskilte tegn sekvenser. Uden overlap. Og med mulighed for færre end 4 i sidste gruppe.
Avatar billede arne_v Ekspert
21. oktober 2024 - 17:00 #4
Regex kan pyntes ned til:

"[^ ]+(( [^ ]+)?){3}"
Avatar billede arne_v Ekspert
21. oktober 2024 - 17:01 #5
Hvis det sidste skal ignoreres hvis der ikke er 4, så:

"[^ ]+( [^ ]+){3}"
Avatar billede joki Mester
22. oktober 2024 - 09:28 #6
Tak Arne

Er der mulighed for at angive efter hvilket "ord" (nr) i rækken man starter
Jeg arbejder i CRM Dynamic og har en færdig CWA (Extract) som jeg kan kalde, så jeg vil gerne undgå at skulle kode ny CWA

Det er lidt specielt da jeg skal splitte en streng (fakturatekst) til flere ordrelinjer fordi man i Maconomy  har begrænset antal karakterer på hver ordrelinje.
Spørg mig ikke hvorfor man skriver det som ordrelinjer men det gør man

Jeg tænker at gøre nedenstående

1. Word count
2. Hente 4 første ord
3 Oprette ordrelinje
4 Hente næste 4 ord og gentage punkt 3 indtil word count er opnået
Avatar billede arne_v Ekspert
22. oktober 2024 - 14:18 #7
Hvis der kan stå et antal tegn per linie så skal der vel tælles tegn og ikke ord.

Helt andet approach:


using System;

namespace LineSplit
{
    public class Program
    {
        public static void LineSplit(string s, int maxlinlen)
        {
            Console.WriteLine("".PadRight(maxlinlen, '*'));
            string[] parts = s.Split(' ');
            int ix = 0;
            string line = "";
            while(ix < parts.Length)
            {
                if(parts[ix].Length > maxlinlen)
                {
                    throw new Exception(string.Format("maxlinlen = {0} and word {1} does not work", maxlinlen, parts[ix]));
                }
                if(line.Length + 1 + parts[ix].Length > maxlinlen)
                {
                    Console.WriteLine(line);
                    line = "";
                }
                line = line + " " + parts[ix];
                ix++;
            }
            if(line.Length > 0)
            {
                Console.WriteLine(line);
            }
            Console.WriteLine("".PadRight(maxlinlen, '*'));
        }
        public static void Main(string[] args)
        {
            string s = "Jeg tester c#, fordi det er mandag. Og nu prøver vi tegn fremfor ord.";
            LineSplit(s, 40);
            LineSplit(s, 20);
            LineSplit(s, 10);
            Console.ReadKey();
        }
    }
}
Avatar billede joki Mester
23. oktober 2024 - 14:35 #8
Jeg fik lavet noget som virker ved at hente de 4 første ord.
Herefter replace af den komplette streng streng med tom streng hvor jeg matcher de 4 ord.
Gentagelse af denne proces til min extract af de 4 ord er tom
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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