C# Regex.Replace - (<:Lu+\:)

C# Regex.Replace - (<:Lu+\:)
2010-01-15T10:51:41+01:00
2010-01-27T16:01:39+01:00
2022-11-16T10:41:54+01:00
FTeR
A C# kód:
string txt = "Itt kezdődik a szöveg, majd<br />NAGYBETŰKKEL:<br />folytatódik, tova halad.<br />NAGYBETŰKKEL:<br /> míg véget nem ér"; string s = Regex.Replace(txt, @"(<:Lu+\:)", "<br /><br /><strong>$1</strong><br />", RegexOptions.Singleline);

Ha VS Quick Replace-be másolom a regexet (<:Lu+\:), akkor működik, de a fenti kód nem fejti ki várt hatását (a nagybetűkkel írt kettőspontra végződő szavak félkövérítése).
RegexOptions-ból többfélét is próbáltam.

plz, hlp!
Előre is thx.
Mutasd a teljes hozzászólást!
No szóval, nem hagytam annyiban a dolgot.
Magam is C#-ban fejlesztek VS2005 alatt, nem véletlenül látogatom ezt az oldalt, sokat tanultam már itt. utánanéztem az MSDN-en ennek a : escape-s dolognak:
.NET Framework Regular Expressions
Regular Expression Language Elements
Character Escapes
Sehol sem írtak semmi ilyet, hogy a : escape karakter lenne. Sem .Net 1, 2, 3, 3.5 és 4-esben sem.

Úgyhogy gondoltam megpróbálom megcsinálni, bár a főnök csúnyán tud nézni ha munkaidőben mással foglalkozom xD

Szóval íme:
string txt = "Itt kezdődik a szöveg, majd<br />NAGYBETŰKKEL:<br />folytatódik, tova halad.<br />NAGYBETŰKKEL:<br /> míg véget nem ér"; string s = Regex.Replace(txt, @"<br[ ]*/>[\p{Lu}]+:", "<br /><br /><strong>$1</strong><br />", RegexOptions.None);

A varázslat:
@"<br[ ]*/>[\p{Lu}]+:"

Nekem működik, ha kell screenshot-ot is küldök, becs' szóra mondom, kajakra működik, és nem escapeltem a kettőspontot.

Remélem ezzel már tudok segíteni neked.

Üdv!
Mutasd a teljes hozzászólást!

  • És nem ad semmiféle hibát?

    Mondjuk nekem elsőre az jutott eszembe, hogy a \ karakter bizony a Regexnél is Escape szekvencia, ezért duplán kellene írnod. Vagy a franc tudja hogy, de az a \: ott szerintem nem stimmel.

    Egyébként itt egy jó leírás:
    Regular Expressions in ASP.NET
    Mutasd a teljes hozzászólást!
  • Az a része rossz a kódodnak, hogy nincsen találat. (Ezt valószínűleg tudtad.)

    Egészen pontosan mit szeretnél csinálni?
    Én úgy értelmeztem, hogy a soremelések után következő csupa nagybetűs kettősponttal végződő szavakat szeretnéd lecserélni vastagbetűsre.

    Ebben az esetben, az alábbi kódnak egy hiányossága van: tetszőleges karaterláncot megtalál, amely soremelés és kettőspont között van. Mindenestre működik.

    string source = "Itt kezdődik a szöveg, majd<br />NAGYBETŰKKEL:<br />folytatódik, " + "tova halad.<br />NAGYBETŰKKEL:<br /> míg véget nem ér"; string expression = @"<br />(.*?)\:"; string replacement = "<strong>$1</strong>"; string result = Regex.Replace(source, expression, replacement, RegexOptions.Singleline);
    Mutasd a teljes hozzászólást!
  • Nem ad hibát.
    Az a \ a kettőspontnak szól, mert .net alatt az egy speciális karakter.
    A string elején a @ miatt nem kell dupla escape.

    A Regex kifejezés jó, mert VS-ben megtalálja a kívánt karaktersort, csak futás közben nem, tehát vmi egyéb szintakszissal van baja.
    Mutasd a teljes hozzászólást!
  • ezt a kódot lefuttatad? Nekem .net alatt a .*? még sosem működött.
    Mutasd a teljes hozzászólást!
  • Oké, a @ karakter hatására nem dolgozza fel az escape szekvenciát, így azt a \ karaktert a regex fogja escape szekvenciaként használni, de a : regex kifejezésben nem speciális karakter, minek escape-elni?
    Bocs, te tettél fel eredetileg kérdést, de kíváncsi lettem az ott hogy stimmel, eddig csak néhány alkalommal használtam regular expression-t, pedig igen sok lehetőséget rejt magában.
    Mutasd a teljes hozzászólást!
  • C#-ban nem perl regex van. lásd: \W helyett :Lu van.
    Mutasd a teljes hozzászólást!
  • No szóval, nem hagytam annyiban a dolgot.
    Magam is C#-ban fejlesztek VS2005 alatt, nem véletlenül látogatom ezt az oldalt, sokat tanultam már itt. utánanéztem az MSDN-en ennek a : escape-s dolognak:
    .NET Framework Regular Expressions
    Regular Expression Language Elements
    Character Escapes
    Sehol sem írtak semmi ilyet, hogy a : escape karakter lenne. Sem .Net 1, 2, 3, 3.5 és 4-esben sem.

    Úgyhogy gondoltam megpróbálom megcsinálni, bár a főnök csúnyán tud nézni ha munkaidőben mással foglalkozom xD

    Szóval íme:
    string txt = "Itt kezdődik a szöveg, majd<br />NAGYBETŰKKEL:<br />folytatódik, tova halad.<br />NAGYBETŰKKEL:<br /> míg véget nem ér"; string s = Regex.Replace(txt, @"<br[ ]*/>[\p{Lu}]+:", "<br /><br /><strong>$1</strong><br />", RegexOptions.None);

    A varázslat:
    @"<br[ ]*/>[\p{Lu}]+:"

    Nekem működik, ha kell screenshot-ot is küldök, becs' szóra mondom, kajakra működik, és nem escapeltem a kettőspontot.

    Remélem ezzel már tudok segíteni neked.

    Üdv!
    Mutasd a teljes hozzászólást!
  • működik, thx. habár van pár dolog amit nem értek.
    mi a \p és azt honnan szedted, h :Lu helyett lehet {Lu} is?

    az elején lévő "<"-t én nem a <br /> kezdetének szántam, hanem "szó kezdete" jelnek (amikor elkezdtem írni még nem voltak <br-ek a szövegben, arra előbb egy sima \n replacet nyomok).

    asszem ott rontottam el, h abból a feltételetzésből indultam ki, h a VS keresője és s .Net ugyanazt a regex szintakszist használja...
    Mutasd a teljes hozzászólást!
  • Onnan szedtem, hogy elolvastam a .net regex leírását amit már az első válaszomban is linkeltem

    Hja, ezek szerint az a feltevés téves volt, én sem tudtam, hogy a VS keresője más szintaktikával működik.

    Örülök hogy tudtam segíteni.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd