Community
    • Login

    Regex - find string and between parenthesis values

    Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
    11 Posts 4 Posters 998 Views
    Loading More Posts
    • 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.
    • Anthony NoriegaA
      Anthony Noriega
      last edited by

      Another regex quandary for me… another find and replace.
      How would I say to find a string and return only what is in the parenthesis after the string.
      Example string:
      meta_keywords_s:(/.power./ /.bi./)

      So only leave what is between the parenthesis, and delete everything else.

      Alan KilbornA PeterJonesP 2 Replies Last reply Reply Quote 0
      • Alan KilbornA
        Alan Kilborn @Anthony Noriega
        last edited by

        @Anthony-Noriega

        Why not try the solution HERE this time around?

        It is fairy easy to match text between two different symbols.
        Above you have ( and ).
        The only trick is that with regular-expressions, those characters mean something to the search beyond their literal values.
        So you have to “escape” them, like \( and \) – the \ is known sometimes as the escape character, removing special meaning from the character directly following.

        Thus I think \(.+?\) could be what you need to “mark” your text for copying (referring to the technique in the other thread for what comes after the marking).

        Or, to mark it without including the parens, this might work better: (?<=\().+?(?=\))

        Anthony NoriegaA 1 Reply Last reply Reply Quote 1
        • Anthony NoriegaA
          Anthony Noriega @Alan Kilborn
          last edited by

          @Alan-Kilborn
          Thanks Alan, I guess I should have posted a bit more.
          There are other variables that also have same parenthesis pattern, i.e.

          page_title_s:(/.*united.*/ /.*way.*/)
          

          I dont need that because it is duplicative of

          meta_keywords_s:(/.*united.*/ /.*way.*/)
          

          I only need what is in the parenthesis of this variable.
          So I was trying to say, only return what is after this variable, and only what is in the first set of parents following that variable, and both of these are on the same line, along with 2 more variables with the same pattern.

          1 Reply Last reply Reply Quote 0
          • PeterJonesP
            PeterJones @Anthony Noriega
            last edited by

            @Anthony-Noriega ,

            The concepts involved seem the same as your previous question: the exact details are slightly different, but it’s still “match a bunch, but only keep part of the match”, which will still be accomplished by using parenthesized groups in the match, and $1 in the replacement.

            So why don’t you give it a go: come up with a few lines of example text, some lines which should match and get transformed, and some which should not; then experiment with a regex that you think should work, based on the regexes from the previous discussion. If it works: great, you’ve learned how to do it yourself! If it doesn’t work: great, a learning opportunity!

            If it doesn’t work, come back to here:

            1. Post your example “before” data. Use the </> button on the forum editor (paste your text, select your text, hit </>) so that the text doesn’t get edited by the forum.

            2. In another section (separate </>), post your example “wanted/after” data – you will have to manually create this.

            3. In another section, show the exact FIND and REPLACE you tried.

            4. After that, try to explain why you thought it would work.

            If you don’t go through this exercise, you won’t ever learn how to do it yourself. And we are quickly going to stop answering you, if you don’t show a willingness to learn and try.

            Suggested post format, for use by @Anthony-Noriega :

            Here is my “before” data:

            before
            data
            here
            

            Here is my desired “after” data:

            after data here
            

            Here is what I actually got

            messed up
            after
            data
            here
            

            Here is what I tried

            find:
            (?-s)/\.\*\K(.+?)(?=\.\*/)
            
            replace:
            ?1\1\r\n
            

            Here is why I tried it: it’s a direct quote from the previous thread, without modification; I am not sure why I thought it would work

            ----

            Do you want regex search/replace help? Then please be patient and polite, show some effort, and be willing to learn; answer questions and requests for clarification that are made of you. All example text should be marked as plain text using the </> toolbar button or manual Markdown syntax. Screenshots can be pasted from the clipboard to your post using Ctrl+V to show graphical items, but any text should be included as literal text in your post so we can easily copy/paste your data. Show the data you have and the text you want to get from that data; include examples of things that should match and be transformed, and things that don’t match and should be left alone; show edge cases and make sure you examples are as varied as your real data. Show the regex you already tried, and why you thought it should work; tell us what’s wrong with what you do get… Read the official NPP Searching / Regex docs and the forum’s Regular Expression FAQ. If you follow these guidelines, you’re much more likely to get helpful replies that solve your problem in the shortest number of tries.

            1 Reply Last reply Reply Quote 2
            • Alan KilbornA
              Alan Kilborn
              last edited by

              Yea, I second what Peter says.
              It seems like whatever Anthony is currently working on, he’s going to have a lot more of these situations.
              Pays off big time to LIYSYCDIY (Learn It Yourself So You Can Do It Yourself).

              Anthony NoriegaA 1 Reply Last reply Reply Quote 0
              • Anthony NoriegaA
                Anthony Noriega @Alan Kilborn
                last edited by

                @Alan-Kilborn I’m trying. Regex ain’t easy to lean. Ill take these concepts and start putting them to practice.

                Alan KilbornA Terry RT 3 Replies Last reply Reply Quote 2
                • Alan KilbornA
                  Alan Kilborn @Anthony Noriega
                  last edited by

                  @Anthony-Noriega said in Regex - find string and between parenthesis values:

                  Regex ain’t easy to learn

                  Surely true.
                  But as you’ll see, you can’t use the Community for more than a couple of times for purely free data transformations before people start getting “edgy” about it. :-)

                  Anthony NoriegaA 1 Reply Last reply Reply Quote 0
                  • Anthony NoriegaA
                    Anthony Noriega @Alan Kilborn
                    last edited by

                    @Alan-Kilborn Fair enough.

                    Alan KilbornA 1 Reply Last reply Reply Quote 0
                    • Alan KilbornA
                      Alan Kilborn @Anthony Noriega
                      last edited by

                      @Anthony-Noriega

                      So in what I gave you last, I used this construct leading it off:

                      (?<=\(

                      This means that before the text you want, a ( must appear, and note that the ( isn’t wanted as part of the matching text.

                      So if you want to reach further back, just insert stuff between the = and the \, so, say, like this: (?<=foobar\(

                      1 Reply Last reply Reply Quote 1
                      • Alan KilbornA
                        Alan Kilborn @Anthony Noriega
                        last edited by

                        @Anthony-Noriega

                        Often with regex, this kind of “command” is used: (?...) where ... is different things at different times.

                        Example: (?#...) is a comment

                        Example: (?<=...) is a lookbehind assertion for equality (ok, assertion is an advanced concept at this point)

                        The key point is to note the (? at the start, and the ) at the end, then mentally disregard and see what is left, which in the latter case, is <= which is an arrow pointing backward, and an equal sign, so you should think “text that comes earlier must match what comes after the equal sign”.

                        Just some tidbits.

                        1 Reply Last reply Reply Quote 2
                        • Terry RT
                          Terry R @Anthony Noriega
                          last edited by

                          @Anthony-Noriega said in Regex - find string and between parenthesis values:

                          I’m trying. Regex ain’t easy to learn

                          Just as a suggestion. Break down your problem into smaller steps. You are looking for some text on a line, and then that line needs to return something else on the line. So we have 2 steps. The first is to identify a particular line. So that would suggest using the “bookmark” function. You could easily do that, then perhaps copy bookmarked lines elsewhere (another tab). Then you could erase all characters up until the first “(”. Then erase everything after the “)” bracket. These 3 steps are all very easy to achieve with regex. Indeed, they are in reality some of the first steps you would take in learning regex.

                          If you come to us you will likely get a 1 step complete solution, and unfortunately you will find that difficult to understand and that will likely not be helpful in you learning regex.

                          I always say that you have to get a good foundation in regex before attempting complicated problems, and that may also involve breaking down the problem into smaller steps so that each can possibly become a simple problem.

                          And while learning, if you do have a problem that you can’t overcome we WILL help if you can provide evidence of what you have tried, even if it failed. At least we can see some intent on your behalf.

                          Terry

                          1 Reply Last reply Reply Quote 3
                          • First post
                            Last post
                          The Community of users of the Notepad++ text editor.
                          Powered by NodeBB | Contributors