Avatar billede pigbear Nybegynder
07. januar 2009 - 12:21 Der er 7 kommentarer og
1 løsning

Regex - hente streng imellem to paranteser

Hej,

Kan nogen hjælpe med dette udtryk:

inputstreng = ""[TEST(Antal-1)]""

Regex regexp = new Regex("[" + ".*" + "]");
tekst_imellem_parenteser = regexp.Match(inputstreng, 0, inputstreng.Length).Value;


tekst_imellem_parenteser skal nu indelholde: TEST(Antal-1)

hvorefter jeg så bagefter skal finde det der står mellem ()
Regex regexp = new Regex("(" + ".*" + ")");
tekst_imellem_parenteser = regexp.Match(inputstreng, 0, inputstreng.Length).Value;

tekst_imellem_parenteser skal nu indelholde Antal-1

               
Nogen bud ?

mvh

pigbear
Avatar billede coderdk Praktikant
07. januar 2009 - 13:15 #1
Du kan gøre det i ét med mønsteret:

"\[(?<FUNC>(.+)(\((?<ARG>.+)\))))?\]"

Et eksempel med en console app:

string inputstreng = "[TEST(Antal-1)]";

Regex regexp = new Regex(@"\[(?<FUNC>(.+)(\((?<ARG>.+)\)))?\]");

MatchCollection mc = regexp.Matches(inputstreng);

foreach (Match m in mc)
{
    Console.WriteLine("FUNC: " + m.Groups["FUNC"]);
    Console.WriteLine("ARG: " + m.Groups["ARG"]);
}
Avatar billede coderdk Praktikant
07. januar 2009 - 13:16 #2
Den skulle gerne skrive:

FUNC: TEST(Antal-1)
ARG: Antal-1

ud i konsolvinduet..
Avatar billede coderdk Praktikant
07. januar 2009 - 13:26 #3
I øvrigt, hvis () altid er med, kan mønsteret være:

@"\[((?<FUNC>.+)\((?<ARG>.+)\))"

hvis jeg ikke tager meget fejl
Avatar billede coderdk Praktikant
07. januar 2009 - 13:28 #4
Sorry:

@"\[(?<FUNC>.+\((?<ARG>.+)\))\]"
Avatar billede coderdk Praktikant
07. januar 2009 - 13:29 #5
Og hvis argument skal kunne være tom, som f.eks. TEST() så:

@"\[(?<FUNC>.+\((?<ARG>.*)\))\]"
Avatar billede pigbear Nybegynder
08. januar 2009 - 00:41 #6
Flot tak skal du ha, det virker

Jeg er ikke særlig god til regex endnu. Hvordan skal det skrives hvis
string inputstreng = "[TEST-1]"; Hvordan fanger jeg -1 i dette tilfælde !

Mine kombinationer af parametre er:
"[TEST]";
"[TEST-1]"; eller "[TEST+1]"; (1 = hvilket som helst heltal)
og "[TEST(Antal-1)]"; som du jo så smukt har løst

Kan du lave et eksempel på regex som finder "[TEST]"; og "[TEST-1]";

mange tak
Avatar billede coderdk Praktikant
08. januar 2009 - 10:55 #7
@"\[(?<FUNC>.+(?<ARG>[+-]\d+))\]"

Her vil m.Groups["ARG"] være +X eller -X hvor X er et vilkårligt heltal :)
Avatar billede pigbear Nybegynder
08. januar 2009 - 12:16 #8
Mange tak,
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