Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C#
  4. RegEx expression help

RegEx expression help

Scheduled Pinned Locked Moved C#
regexquestionhelptutorial
31 Posts 3 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • N NavnathKale

    Great !!! Its always better to use Named capturing groups in complicated regex patterns. But this one is ok ;) BTW what about values with spaces ?

    F Offline
    F Offline
    Fayu
    wrote on last edited by
    #15

    DOH!!! Values with spaces dont work.... how do I resolve that>

    N 1 Reply Last reply
    0
    • F Fayu

      DOH!!! Values with spaces dont work.... how do I resolve that>

      N Offline
      N Offline
      NavnathKale
      wrote on last edited by
      #16

      Dont worry my solution still works !!! I guess u don;t need name captured groups, so I have removed it n here is new one

      (\[{3}MyProperty4\]{3}[\s{1}])(.*?(?=\s{1}\[|$))

      Mark as anwser !!!! :-D

      F 2 Replies Last reply
      0
      • F Fayu

        The property name is looks like this [[[MyProperty2]]] but does not end with . So the property/value item shows up as [[[MyProperty2]]] Value2. So if there are multiple properties it will look like this: [[[MyProperty1]]] Value1 [[[MyProperty2]]] Value2 [[[MyProperty3]]] Value3. Having said that, the pattern provided did not work because I think it is looking for end tag. One other thing I want to point out is that there can be only one property which can or cannot have a space after it. My requirements: 1) Get the value of a property if only one propery is listed ([[[MyProperty1]]] value1) 2) Get the value of a property if there are more than one properies listed ([[[MyProperty1]]] value1 [[[MyProperty2]]] value2 [[[MyProperty3]]] value3 3) In the pattern, I want to pass in the property name and get back the value 4) Use VBScript.RegexExp object (which I dont think will make a difference when it comes to pattern) Thanks so much for assisting me with this.

        P Offline
        P Offline
        PIEBALDconsult
        wrote on last edited by
        #17

        I prefer the technique I showed. You then enumerate the Matches and fill a Dictionary with the Names and Values. Your requirements 1 -- 3 are then satisfied by the Dictionary and you only have to execute the RegEx once per group of properties.

        Fayu wrote:

        Use VBScript

        Then why post it in the C# forum? Or maybe you should give more information on the bigger picture of what you are trying to accomplish.

        N P 2 Replies Last reply
        0
        • N NavnathKale

          Dont worry my solution still works !!! I guess u don;t need name captured groups, so I have removed it n here is new one

          (\[{3}MyProperty4\]{3}[\s{1}])(.*?(?=\s{1}\[|$))

          Mark as anwser !!!! :-D

          F Offline
          F Offline
          Fayu
          wrote on last edited by
          #18

          Works like a charm!!! Any way I can just have the value returned?

          N 1 Reply Last reply
          0
          • N NavnathKale

            Dont worry my solution still works !!! I guess u don;t need name captured groups, so I have removed it n here is new one

            (\[{3}MyProperty4\]{3}[\s{1}])(.*?(?=\s{1}\[|$))

            Mark as anwser !!!! :-D

            F Offline
            F Offline
            Fayu
            wrote on last edited by
            #19

            I would LOVE an explanation on the logic behind this... (\[{3}Property2\]{3}[\s{1}])(.*?(?=\s{1}\[|$)) The only part I understand is (\[{3}Property2\]{3}[\s{1}])

            N 1 Reply Last reply
            0
            • F Fayu

              Works like a charm!!! Any way I can just have the value returned?

              N Offline
              N Offline
              NavnathKale
              wrote on last edited by
              #20

              Now time to callback my initial post. :| Like I said use Named capturing groups. Using this you can just return the value of provided propertyname

              Regex regex = new Regex(@"(\[{3}MyProperty3\]{3}[\s{1}])(?<MyProperty3>.*?(?=\s{1}\[|$))");
              Match regexmatch = regex.Match(@"[[[MyProperty1]]] Value [[[MyProperty2]]] value2 [[[MyProperty3]]] value 3");
              string value = regexmatch.Groups["MyProperty3"].Value

              Above code will return value of property MyProperty3

              1 Reply Last reply
              0
              • F Fayu

                I would LOVE an explanation on the logic behind this... (\[{3}Property2\]{3}[\s{1}])(.*?(?=\s{1}\[|$)) The only part I understand is (\[{3}Property2\]{3}[\s{1}])

                N Offline
                N Offline
                NavnathKale
                wrote on last edited by
                #21

                Yeah!!! u ought to know everything thats going around on earth :wtf: Google will take you to right place if you search for positive lookahead in regex :-\

                1 Reply Last reply
                0
                • P PIEBALDconsult

                  I prefer the technique I showed. You then enumerate the Matches and fill a Dictionary with the Names and Values. Your requirements 1 -- 3 are then satisfied by the Dictionary and you only have to execute the RegEx once per group of properties.

                  Fayu wrote:

                  Use VBScript

                  Then why post it in the C# forum? Or maybe you should give more information on the bigger picture of what you are trying to accomplish.

                  N Offline
                  N Offline
                  NavnathKale
                  wrote on last edited by
                  #22

                  Your solution will also give same result, but it will return all properties. As Fayu asked on his requirement, it wasnt he is looking for. Cheers !!!

                  P 1 Reply Last reply
                  0
                  • N NavnathKale

                    Your solution will also give same result, but it will return all properties. As Fayu asked on his requirement, it wasnt he is looking for. Cheers !!!

                    P Offline
                    P Offline
                    PIEBALDconsult
                    wrote on last edited by
                    #23

                    Navnath R. Kale wrote:

                    it wasnt he is looking for

                    It should be.

                    1 Reply Last reply
                    0
                    • P PIEBALDconsult

                      I prefer the technique I showed. You then enumerate the Matches and fill a Dictionary with the Names and Values. Your requirements 1 -- 3 are then satisfied by the Dictionary and you only have to execute the RegEx once per group of properties.

                      Fayu wrote:

                      Use VBScript

                      Then why post it in the C# forum? Or maybe you should give more information on the bigger picture of what you are trying to accomplish.

                      P Offline
                      P Offline
                      PIEBALDconsult
                      wrote on last edited by
                      #24

                      Fayu wrote:

                      I wish I can use the CLR but the requirements I have prevent me from using the CLR.

                      ::Throws up hands::

                      F 1 Reply Last reply
                      0
                      • P PIEBALDconsult

                        Fayu wrote:

                        I wish I can use the CLR but the requirements I have prevent me from using the CLR.

                        ::Throws up hands::

                        F Offline
                        F Offline
                        Fayu
                        wrote on last edited by
                        #25

                        Yea but I am not using the clr. The pattern he provided worked with all requirement, including not using CLR. I used his pattern using VBScript.RegexExp and it worked wonders. Thanks for your help as well.

                        P 1 Reply Last reply
                        0
                        • F Fayu

                          Yea but I am not using the clr. The pattern he provided worked with all requirement, including not using CLR. I used his pattern using VBScript.RegexExp and it worked wonders. Thanks for your help as well.

                          P Offline
                          P Offline
                          PIEBALDconsult
                          wrote on last edited by
                          #26

                          Mine works with perl: perl -e "print \"[[[MyProperty1]]] Value [[[MyProperty2]]] value2 [[[MyProperty3]]] value 3\" =~ m/(?:\[\[\[(?'Name'.*?)\]\]\](?'Value'[^\[]*))/g"

                          %stuff = $ARGV[0] =~ m/(?:\[\[\[(?'Name'.*?)\]\]\](?'Value'[^\[]*))/g ;

                          foreach $id ( sort ( keys ( %stuff ) ) )
                          {
                          print ( "$id = $stuff{$id}\n" ) ;
                          }

                          modified on Saturday, April 10, 2010 12:33 AM

                          N 1 Reply Last reply
                          0
                          • P PIEBALDconsult

                            Mine works with perl: perl -e "print \"[[[MyProperty1]]] Value [[[MyProperty2]]] value2 [[[MyProperty3]]] value 3\" =~ m/(?:\[\[\[(?'Name'.*?)\]\]\](?'Value'[^\[]*))/g"

                            %stuff = $ARGV[0] =~ m/(?:\[\[\[(?'Name'.*?)\]\]\](?'Value'[^\[]*))/g ;

                            foreach $id ( sort ( keys ( %stuff ) ) )
                            {
                            print ( "$id = $stuff{$id}\n" ) ;
                            }

                            modified on Saturday, April 10, 2010 12:33 AM

                            N Offline
                            N Offline
                            NavnathKale
                            wrote on last edited by
                            #27

                            Well i guess, all this confusion is because question is in wrong section. Perl supports Named capture groups but client scripts don't.

                            P 1 Reply Last reply
                            0
                            • N NavnathKale

                              Well i guess, all this confusion is because question is in wrong section. Perl supports Named capture groups but client scripts don't.

                              P Offline
                              P Offline
                              PIEBALDconsult
                              wrote on last edited by
                              #28

                              Navnath R. Kale wrote:

                              Named capture groups

                              You don't need to name them. The important thing is to have the engine return all the matches and enumerate them.

                              N 1 Reply Last reply
                              0
                              • P PIEBALDconsult

                                Navnath R. Kale wrote:

                                Named capture groups

                                You don't need to name them. The important thing is to have the engine return all the matches and enumerate them.

                                N Offline
                                N Offline
                                NavnathKale
                                wrote on last edited by
                                #29

                                :doh: !!! Now the thread becomes the session. Actually (?'Name') and (?'Value') is equal to (?<Name>) and (?<Value>) and is nothing but Named capturing group. .Net supports it both way.

                                P 1 Reply Last reply
                                0
                                • N NavnathKale

                                  :doh: !!! Now the thread becomes the session. Actually (?'Name') and (?'Value') is equal to (?<Name>) and (?<Value>) and is nothing but Named capturing group. .Net supports it both way.

                                  P Offline
                                  P Offline
                                  PIEBALDconsult
                                  wrote on last edited by
                                  #30

                                  Yes. I prefer the apostrophes -- at least I don't need to escape them when I post them. :-D

                                  N 1 Reply Last reply
                                  0
                                  • P PIEBALDconsult

                                    Yes. I prefer the apostrophes -- at least I don't need to escape them when I post them. :-D

                                    N Offline
                                    N Offline
                                    NavnathKale
                                    wrote on last edited by
                                    #31

                                    Yeah :laugh: On first post I was like " :doh: WTF happened to my pattern, it was correct when I typed"

                                    1 Reply Last reply
                                    0
                                    Reply
                                    • Reply as topic
                                    Log in to reply
                                    • Oldest to Newest
                                    • Newest to Oldest
                                    • Most Votes


                                    • Login

                                    • Don't have an account? Register

                                    • Login or register to search.
                                    • First post
                                      Last post
                                    0
                                    • Categories
                                    • Recent
                                    • Tags
                                    • Popular
                                    • World
                                    • Users
                                    • Groups