• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyrażenia regularne C# - czy da się zmodyfikować kopie dopasowania wyrażenia regularnego?

Object Storage Arubacloud
0 głosów
198 wizyt
pytanie zadane 25 marca 2017 w C# przez shuetam Nowicjusz (240 p.)

Cześć,
postaram się na przykładzie jasno wyrazić w czym mam problem. Załóżmy, że przy pomocy wyrażenia regularnego chce zmodyfikować tekst tak aby powiększyć pierwsze litery wyrazów w zdaniu. Tworze wyrażenie ktore dopasowuje te pierwsze litery, następnie chciałby ich zmodyfikowaną kopię (powiększone)  wstawić za pomocą funkcji Replace. Czy jest to możliwe? Wstawiam kod, jak widać w kodzie w miejsce dopasowań wyrażenia regularnego wstawia się ich kopia (więc tekst się nie zmienia) ale jak zrobić aby na tych kopiach zadziałała funkcja ToUpper (w moim kodzie ona nie działa)?  Wiem, że ten konkretny przykład mozna rozwiązać inaczej na różne sposoby ale czy jest możliwość zrobić to w taki lub podobny sposób przy pomocy wyrażeń regularnych? Z góry dzieki za pomocy, mam nadzieje, ze w miare jasno napisalem o co chodzi :/

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace ConsoleApplication15
{
    class Program
    {
        static void Main(string[] args)
        {
            string tekst = "Ministerstwo spraw zagranicznych rzeczypospolitej polskiej";

            string dopasowanie = @"\s+\w{1}";

            // przedstawienie znalezionych dopasowan
            MatchCollection matches = Regex.Matches(tekst, dopasowanie);

            foreach (Match v in matches)
            {
             
                Console.WriteLine(v);
            }

            string dopasowanieZmiana = "$&"; // kopia dopasowania  
          
            Console.WriteLine(Regex.Replace(tekst, dopasowanie, dopasowanieZmiana.ToUpper())); // ToUpper nie dziala na kopii dopasowania
           
            Console.ReadKey();
        }
    }
}

 

1 odpowiedź

0 głosów
odpowiedź 27 marca 2017 przez egoon Obywatel (1,360 p.)

Witam

tak na szybko - masz pętlę

 foreach (Match v in matches)
            {
              
                Console.WriteLine(v);
            }

 

może by w niej, zamiast wypisywać wyniki, powiększyć litery? A już powiększone wpisać w jeden ciąg? I dopiero to wyświetlić.

 

komentarz 27 marca 2017 przez shuetam Nowicjusz (240 p.)
Dzięki za odpowiedź, samo powiększenie liter ok, ale chodzi o to jak teraz za pomocą funkcji Regex.Replace() zamienić dopasowania na te powiększone litery? Przepatrzyłem różne przykłady zastosowania tej funkcji i chyba jednak nie jest to możliwe bo ona w miejsce dopasowań wstawiać może tylko pewnego określonego stringa, albo kopie dopasowania lub ciąg znaków stojący za lub przed dopasowaniem i nie da się na tych "zastępnikach" wykonywać żadnych  funkcji  (jak na przykład ToUpper()) - chociaz moze są jakieś sposoby ale nic do tej pory nie znalazłem
komentarz 28 marca 2017 przez egoon Obywatel (1,360 p.)
komentarz 31 marca 2017 przez shuetam Nowicjusz (240 p.)
Dzięki właśnie o coś takiego chodziło, na msdn jest jednak wszystko co potrzeba :) Dzięki wielkie!

Podobne pytania

0 głosów
1 odpowiedź 169 wizyt
pytanie zadane 7 stycznia 2019 w Python przez Frezen Obywatel (1,330 p.)
0 głosów
1 odpowiedź 993 wizyt
+1 głos
1 odpowiedź 241 wizyt

92,536 zapytań

141,377 odpowiedzi

319,452 komentarzy

61,920 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...