---
title: "Evighetsloop. Strängen ändras inte"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/161658-evighetsloop-strängen-ändras-inte"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "Pedda"
published: "2007-06-18T13:24:42.000Z"
updated: "2007-06-18T15:35:49.000Z"
replies: 5
views: 391
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/161658-evighetsloop-strängen-ändras-inte"
---

# Evighetsloop. Strängen ändras inte

## #1 — Pedda, 2007-06-18T13:24Z

Följande kod är en evighetsloop.
Texten i strängen ändras aldrig trots min replace. 
Skriver jag ut värdena i m.Groups\[\] så stämmer dom med texten i strängen.

```
Match m;
int i = 1;

string pattern = "<text><z-betoning z-bvariant = \"5\">(.*)</z-betoning>(.*)</text>";
for (m = Regex.Match(fileContents, pattern); m.Success; m.NextMatch())
{
     Debug.WriteLine("träff nr: " + i.ToString());
     Debug.WriteLine("Grupp 1: " + m.Groups[1]);
     Debug.WriteLine("Grupp 2: " + m.Groups[2]);

     i++;
     Regex rgx = new Regex("<text><z-betoning z-bvariant = \"5\">" + m.Groups[1] + "</z-betoning>" + m.Groups[2] + "</text>");
     fileContents = rgx.Replace(fileContents, "<obs><obstext><z-betoning z-bvariant = \"5\">" + m.Groups[1] + "</z-betoning>" + m.Groups[2] + "</obstext></obs>");
                        
}
```

Någon som förstår varför strängen inte ändras? Förmodligen något skitfel man har gjort som vanligt.   ;)   :l

Permalänk: https://www.webforum.nu/p/161658

## #2 — nitro2k01, 2007-06-18T13:37Z

1) Var och hur är fileContents definierad?
2) Debug.WriteLine(fileContents); precis före och efter replace.
Edit: 3) Hur definieras m.Success av specen? Kommer det verkligen uppnås i loopen?

Permalänk: https://www.webforum.nu/p/1994105

## #3 — Pedda, 2007-06-18T13:47Z

1\. string fileContents = File.ReadAllText(filename, Encoding.GetEncoding(1252));
2\. Har inte testat att skriva strängen till debuggern, den är ganska lång.
3\. m.Success är ju när matchningen är slut. Och eftersom han får samma träff hela tiden så tar det aldrig slut.

Permalänk: https://www.webforum.nu/p/1994107

## #4 — nitro2k01, 2007-06-18T14:06Z

Vad jag kan komma på så är det att något i m.Groups\[1\] eller m.Groups\[2\] is sig självt utgör en specialtecken för regex och stör ersättningen. (+\*? etc)
Men jag antar att detta är en engångsprocess för att uppdatera syntaxen i en xml-fil?
Jag skulle nog ha löst problemet ungefär så här: (Med undantag för ev småfel eftersom min .net är lite rostig och jag inte har möjlighet att texta koden)

```
Regex rgx = new Regex("<text><z-betoning z-bvariant = \"5\">(.*)</z-betoning>(.*)</text>");
rgx.global = true;

fileContents = rgx.Replace(fileContents, "<obs><obstext><z-betoning z-bvariant = \"5\">$1</z-betoning>$2</obstext></obs>");
```

Permalänk: https://www.webforum.nu/p/1994116

## #5 — Pedda, 2007-06-18T14:19Z

rgx har inte global.

Innehållet i m.Groups\[1\]
Not 1.\</z-betoning\>&#x2003;Ett \<z-betoning z-bvariant = "1"\>System\</z-betoning\> är en variant av \<z-betoning z-bvariant = "1"\>B-System

Innehållet i m.Groups\[2\]
 som kan bestå av (FFX) plus ett antal andra element, delsystem och funktioner (i det följande benämnda FFX-system-element) som erfordras för provtagning. &#x201C;Provtagning&#x201D; inkluderar också test, start och inhämtning och/eller utlämning

Jag är dålig på RegEx men tar inte (.\*) det mesta?

/red
Ja, det är en xml fil jag ska ändra lite i

Permalänk: https://www.webforum.nu/p/1994121

## #6 — Pedda, 2007-06-18T15:35Z

Löste det så här:

```
Regex rx = new Regex("<text><z-betoning z-bvariant = \"5\">(.*)</z-betoning>(.*)</text>");

                    MatchCollection matches = rx.Matches(fileContents);

                    // Hur många träffar fanns det?
                    Debug.WriteLine("Totalt antal träffar. " + matches.Count);

                    // Loopa igenom alla träffar
                    foreach (Match m in matches)
                    {
                        fileContents = rx.Replace(fileContents, "<obs><obstext><z-betoning z-bvariant = \"5\">" + m.Groups[1].Value + "</z-betoning>" + m.Groups[2].Value + "</obstext></obs>", 1);
                        Debug.WriteLine("Träff nr: " + i.ToString());
                        i++;
                    }
```

Permalänk: https://www.webforum.nu/p/1994152

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/161658-evighetsloop-strängen-ändras-inte
