Community
    • Login

    Copy all text that are exactly 4 lines before a search result.

    Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
    6 Posts 3 Posters 198 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.
    • David LD
      David L
      last edited by

      Hello. I’m trying to come up with a regular expression that could select what is inside "

      <text>123</text>
      

      when after we have

      <fill>
              <color value="255,255,255"/>
      </fill>
      

      Also, I’d like the expression copy what is inside

      <text name="title">Find and copy me</text>
      

      Here are some example. Note that the color value is always 4 lines after the <text>

      A big thank you for your help :)

      <draw name="id" w="6.35mm" h="4.233mm" y="1.058mm" x="160.867mm">
                        <ui>
                           <textEdit>
                              <margin/>
                           </textEdit>
                        </ui>
                        <value>
                           <text>400</text>
                        </value>
                        <font size="8pt" typeface="Helvetica" baselineShift="0pt" weight="bold">
                           <fill>
                              <color value="255,255,255"/>
                           </fill>
                        </font>
                        <margin topInset="0mm" bottomInset="0mm" leftInset="0mm" rightInset="0mm"/>
                        <para vAlign="middle" spaceAbove="2.5pt" spaceBelow="0pt" textIndent="0pt" marginLeft="0pt" marginRight="0pt" hAlign="center" lineHeight="9pt"/>
                        <border>
                           <edge presence="hidden"/>
                           <corner presence="hidden" thickness="0.1764mm"/>
                           <fill>
                              <color value="0,0,0"/>
                           </fill>
                        </border>
                        <desc>
                           <text name="ObjectVersion">Release 6.0 - October 17, 2014</text>
                           <text name="ObjectName">LineNumber_FillBlack_White100</text>
                        </desc>
                        <traversal>
                           <traverse ref="form1[0].Page5[0].P10[0].Ln400[0].lbl[0]"/>
                        </traversal>
                     </draw>
      
      
      
       <text name="title">Find and copy me</text>
      
      1 Reply Last reply Reply Quote 0
      • guy038G
        guy038
        last edited by guy038

        Hello, @david-l and All,

        If I fully understood what you said :

        Given your INPUT text, below :

        <draw name="id" w="6.35mm" h="4.233mm" y="1.058mm" x="160.867mm">
                          <ui>
                             <textEdit>
                                <margin/>
                             </textEdit>
                          </ui>
                          <value>
                             <text>400</text>
                          </value>
                          <font size="8pt" typeface="Helvetica" baselineShift="0pt" weight="bold">
                             <fill>
                                <color value="255,255,255"/>
                             </fill>
                          </font>
                          <margin topInset="0mm" bottomInset="0mm" leftInset="0mm" rightInset="0mm"/>
                          <para vAlign="middle" spaceAbove="2.5pt" spaceBelow="0pt" textIndent="0pt" marginLeft="0pt" marginRight="0pt" hAlign="center" lineHeight="9pt"/>
                          <border>
                             <edge presence="hidden"/>
                             <corner presence="hidden" thickness="0.1764mm"/>
                             <fill>
                                <color value="0,0,0"/>
                             </fill>
                          </border>
                          <desc>
                             <text name="ObjectVersion">Release 6.0 - October 17, 2014</text>
                             <text name="ObjectName">LineNumber_FillBlack_White100</text>
                          </desc>
                          <traversal>
                             <traverse ref="form1[0].Page5[0].P10[0].Ln400[0].lbl[0]"/>
                          </traversal>
                       </draw>
        
        <text name="title">Find and copy me</text>
        
        • Open the Mark dialog

        • Uncheck all box options

        • MARK <text name=.+>\K.+(?=</text>)|(?<=<text>).+(?=</text>\R(?:.+\R){3}\h*<color)

        • Check the two options Purge for each search and Wrap around

        • Select the Regular expression search mode

        • Click on the Mark All button

        • Click on the Copy Marked Text button

        • Open a new tab

        • Paste the clipboard contents ( Ctrl + V )

        Voila !

        However, I almost certain that it’s not exactly what you want to :-)

        Best Regards,

        guy038

        David LD 1 Reply Last reply Reply Quote 0
        • David LD
          David L @guy038
          last edited by David L

          @guy038

          Hello. Thank you for your help and your time.

          I probably didn’t explain well ;)

          the code is from a .xfa forms. There is a lot of content inside but I would like to extract only the information that are inside black boxes.

          So, my idea was to search for all code that make a box black

                               <fill>
                                  <color value="255,255,255"/>
                               </fill>
          

          and from here, copy the value written in this box (that is 4 lines above in the code). Here, 400

                                <value>
                                  <text>400</text>
                                </value>
          

          This expression partially work. The problem is that it select the 4 lines above my color value, not only the 400
          (?-is)^(.\R){4}(?=.<color value=“255,255,255”/>)

          again, thank you for your help :)

          1 Reply Last reply Reply Quote 0
          • Mark OlsonM
            Mark Olson
            last edited by

            Have you considered using an XML parser?

            David LD 1 Reply Last reply Reply Quote 0
            • David LD
              David L @Mark Olson
              last edited by

              @Mark-Olson @guy038

              the message on your link is not encouraging :)

              I fount the solution

              I used this:
              (?-is)^(.\R){4}(?=.<color value=“255,255,255”/>)
              then another one on the result of the first to keep only what is between <text> and </text>

              All run on a macro. It’s doing the job.

              Thx again :)

              1 Reply Last reply Reply Quote 0
              • guy038G
                guy038
                last edited by guy038

                Hi, @david-l, @mark-olson and All,

                @david-l, I do not understand !

                The second part of my regex, AFTER the alternation symbol ( | ) was :

                SEARCH (?<=<text>).+(?=</text>\R(?:.+\R){3}\h*<color)

                That I, now, improved as :

                SEARCH (?-is)(?<=<text>).+(?=</text>\R(?:.+\R){3}\h*<color value="255,255,255"/>)

                and these both regexes just match the string 400, against the INPUT text below, not more :

                                  <value>
                                     <text>400</text>
                                  </value>
                                  <font size="8pt" typeface="Helvetica" baselineShift="0pt" weight="bold">
                                     <fill>
                                        <color value="255,255,255"/>
                                     </fill>
                

                So what ?


                Now, @david-l, in your first post, you said :

                Also, I’d like the expression copy what is inside

                <text name=“title”>Find and copy me</text>

                This was considered in the first part of my regex :

                SEARCH / MARK <text name=.+>\K.+(?=</text>) which does find the string Find and copy me only, against the INPUT text, below :

                <text name="title">Find and copy me</text>
                

                Now, may be it’s because i’m not fluent with the HYML language but, in your second post, you said :

                So, my idea was to search for all code that make a box black

                                <fill>
                                   <color value="255,255,255"/>
                                </fill>
                

                And, obviously, the color referenced is the white color ! So what ?


                Sorry, I’m a bit lost !!

                BR

                guy038

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