Avatar billede anderskm Nybegynder
04. marts 2012 - 12:40 Der er 3 kommentarer og
1 løsning

Antal captures i regex udtryk

Hej,

Jeg har i en applikation brug for på forhånd at analysere et regex-udtryk for at finde ud af hvor mange mulige captures, et given regex-udtryk kan returnere.
Lad os sige jeg har følgende regex udtryk:
(\d{5,5})-(?:\w-)?(\d+).(\d+)

For det blotte øje er det "nemt" at se, at der er 4 captures, hvor af den ene er optional og skal ignoreres pga. "?:".  Dvs. jeg får 3 captures.
Mit problem er nu, hvordan får jeg smartest analyseret dette udtryk i min applikation?
Jeg har tænkt, at jeg måske kan søge udtrykket igennem og finde alle start- og slutparenteser og ud fra deres placering (og evt. de omkringliggene tegn) bestemme antallet af captures.
Det skal siges, at der aldrig vil optræde nestede parenteser.

Jeg håber, min problemstilling giver mening, og at I kan hjælpe :)
Avatar billede Syska Mester
05. marts 2012 - 10:50 #1
Avatar billede mireigi Novice
18. marts 2012 - 05:36 #2
Jeg ville nok gøre som følger:

private int GetRegExCaptureCount(string input)
{
  return Regex.Matches(input, @"\([\?\+\*\.\:\,\\\w\d\{\}\[\]\<\>\=]+", RegexOptions.None);
}


Regex.Matches giver dig alle mulige resultater for det udtryk du angiver, kørt på den streng du tester.

Det kan være at det udtryk der testes med skal justeres, men princippet er det samme:
Find alle tilfælde, hvor en der står en begyndende parentes, efterfulgt af alle gyldige Regex karakterer, undtagen afsluttende parentes.
Avatar billede anderskm Nybegynder
01. april 2012 - 08:49 #3
Beklager det sene svar, men har ikke haft tid til at teste det før nu.
Jeg kunne bruge det som buzzzzz, linkede til. Mere præcist endte jeg med følgende:


private Regex rgx = new Regex(@"^(\d{5,5})-(?:\w-)?(\d+).(\d+)\$", RegexOptions.IgnoreCase);
int[] groupnumbers;
int groups;

groupnumbers = rgx.GetGroupNumbers();
groups = groupnumbers.Length;


Tak for hjælpen buzzzz. Smider du et svar, så kvitterer jeg med point :-)
Avatar billede Syska Mester
01. april 2012 - 17:23 #4
Svar
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