---
title: "C# - Ta ut /xxx/ med regexp"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/176062-c-ta-ut-xxx-med-regexp"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "MickeA.com"
published: "2008-12-29T12:52:09.000Z"
updated: "2009-05-26T09:14:15.000Z"
replies: 16
views: 1901
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/176062-c-ta-ut-xxx-med-regexp"
---

# C# - Ta ut /xxx/ med regexp

## #1 — MickeA.com, 2008-12-29T12:52Z

Hej,

Sitter med en Dotnetnukeportal och skriver ut en meny med följande kod:

```
void WriteContainer(StringBuilder sb, PageInfo page) {
	foreach(PageInfo subpage in page.Childs) {
		sb.Append("<li><a href=\"" + subpage.Url + "\" >" + subpage.Name + "</a></li>\n");
	}		
}
```

*subpage.Url* är sökvägen till den sidan och kan t.ex. se ut såhär:

```
/Page1/Subpage1/tabid/123/Default.aspx
```

Jag vill nu ta ut *123* från strängen ovan med t.ex. RegExp, men vet inte alls hur jag ska göra.

Anledningen är att jag ska skriva ut bilder för varje Item och vill döpa dom till 123.jpg (alltså baserat på Id't).

Det finns inga funktioner för att plocka ID direkt, det har jag kolllat, så det här är enda sättet att fixa det här på.

Tacksam för lite hjälp.

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

## #2 — SPiN, 2008-12-29T15:21Z

Det beror lite på. Är det alltid tresiffriga ID-nummer? Finns det andra sekvenser i subpage.Url som kan ha lika många siffror som ID-numret?
Det enklaste är:

```
using System.Text.RegularExpressions;
...
    Regex re = new Regex(@"\d{3}");
    Int32 id = Int32.Parse(re.Matches(subpage.Url)[0].Value);
...
```

Det förutsätter dock att inga andra talserier om tre tecken kan förekomma i strängen och att id-numret alltid är tre siffor långt.

Annars kan man ju arbeta runt det;

```
using System.Text.RegularExpressions;
...
    Regex re = new Regex(@"/\d{1,6}/");
    string result = re.Matches(subpage.Url)[0].Value;
    Int32 id = Int32.Parse(result.Substring(1, result.Length - 2));
...
```

Nu plockar den bara ut nummer ur strängen som omgärdas av / - och är mellan 1 och 6 tecken långa.

Det kan också vara bra att se till så att det verkligen fanns träffar, genom att kolla att re.Matches(subpage.Url).Count \> 0.

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

## #3 — MickeA.com, 2008-12-29T16:05Z

Det jag vill göra är att plocka ut alla mellan **/tabid/** och **/Default.aspx**. ID't är tresiffrigt just nu men kan vara från 1 siffra och uppåt.

Hur ska mönstret se ut för att ta ut allt mellan **/tabid/** och **/Default.aspx**?

Tack!

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

## #4 — SPiN, 2008-12-29T16:49Z

Då kan vi göra så här:

```
using System.Text.RegularExpressions;
...
    Regex re = new Regex(@"/tabid/(\d*)/");
    Int32 result = Int32.Parse(re.Match(subpage.Url).Groups(1).Value);
...
```

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

## #5 — MickeA.com, 2008-12-29T17:03Z

Det kan hända att en länk ser ut såhär:

```
/myPage/100Bonus/tabid/123/Default.aspx
```

 
Isåfall funkar inte det övre exemplet (som du säger) men det andra kör jag på nu och det funkar.
Om man kunde plocka ut allt mellan /tabid/ och /Default.aspx så skulle det vara idiotsäkert, eller hur?

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

## #6 — SPiN, 2008-12-29T17:17Z

Det gör jag ju i mitt sista exempel. :) (och, ja, det bör vara idiotsäkert. ;))

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

## #7 — SPiN, 2008-12-29T18:42Z

Jag tycker att du markerar fel svar. Mitt sista exempel;

```
using System.Text.RegularExpressions;
...
    Regex re = new Regex(@"/tabid/(\d*)/");
    Int32 result = Int32.Parse(re.Match(subpage.Url).Groups(1).Value);
...
```

...är det bättre av dem. Då kan id-numret innehålla hur många tecken som helst och den går enbart efter adresser med tabid som föräldra-mapp.

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

## #8 — MickeA.com, 2008-12-30T10:15Z

Oj, sorry, såg inte det inlägget igår. Givetvis är det det rätta svaret.
En sak bara... var ska *using System.Text.RegularExpressions;* ligga? Var jag än lägger det så får jag ett felmeddelande, tar jag bort det funkar allt som det ska.

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

## #9 — MickeA.com, 2008-12-30T10:19Z

> **SPiN skrev:**
>
> Jag tycker att du markerar fel svar. Mitt sista exempel;
>
>
> ```
> using System.Text.RegularExpressions;
> ...
>     Regex re = new Regex(@"/tabid/(\d*)/");
>     Int32 result = Int32.Parse(re.Match(subpage.Url).Groups(1).Value);
> ...
> ```
>
> 
> ...är det bättre av dem. Då kan id-numret innehålla hur många tecken som helst och den går enbart efter adresser med tabid som föräldra-mapp.

Då får jag:

```
Non-invocable member 'System.Text.RegularExpressions.Match.Groups' cannot be used like a method
```

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

## #10 — SPiN, 2008-12-30T11:14Z

*using System.Text.RegularExpressions* bör ligga vid alla andra namnrymds-referenser. Det kan vara så att det inte behövs i VS.NET, men jag sitter på Mono - och där är man illa tvungen att importera den namnrymden.

Likaså verkar det fungera lite olika med Group/GroupCollection-klasserna. Om du byter parenteserna mot hakparenteser - fungerar det bättre då?

```
Int32 id = Int32.Parse(re.Match(subpage.Url).Groups[1].Value);
```

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

## #11 — NETwork, 2008-12-30T11:16Z

Groups är inte en metod utan du ska plocka ut något mha av ett index... alltså borde det vara:

```
Int32.Parse(re.Match(subpage.Url).Groups[B][1][/B].Value);
```

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

## #12 — MickeA.com, 2008-12-30T11:16Z

> **SPiN skrev:**
>
> Om du byter parenteserna mot hakparenteser - fungerar det bättre då?

Japp!

Tack ska du ha.

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

## #13 — MickeA.com, 2009-05-20T13:48Z

Nu har jag en liknande fråga. Min URL ser ut såhär:

```
/myPage/100Bonus/tabid/123/[b]language/en-US/[/b]Default.aspx
```

.

Jag ska nu ersätta en-US med något annat, t.ex. sv-SE eller zh-CN. Finns det någon motsvariget till PHP's preg_replace()?

Bör bli något likt det här:

```
Regex re = new Regex(@"/language/(\w{2}-\w{2})/");
```

Men hur gör man en replace av det?

Tack!

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

## #14 — NETwork, 2009-05-26T07:30Z

Det finns en replace-metod på regexp-objektet... men kan du inte bara använda en vanlig string replace i det här fallet?

```
string url = "/myPage/100Bonus/tabid/123/language/en-US/Default.aspx";
url = url.Replace("en-US", "Valfri text");
```

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

## #15 — MickeA.com, 2009-05-26T07:39Z

Hmm, jag måste kombinera det med någon typ av regexp, eftersom ibland är det en-US som ska bytas mot något, men när någon är på t.ex. Kinesiska så ska ju zh-CN bytas mot t.ex. sv-SE.

Så jag måste plocka ut /language/**en-US**/Default.aspx, ersätta det som regexp har returnerat och ersätta det.

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

## #16 — Peter S, 2009-05-26T08:36Z

```
str = Regex.Replace(str, "language/\w{2}-\w{2}", "language/sv-SE")
```

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

## #17 — MickeA.com, 2009-05-26T09:14Z

Aha, ska titta på det här. Tack!

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/176062-c-ta-ut-xxx-med-regexp
