• Login
Community
  • Login

Find all lines that contain specific strings

Scheduled Pinned Locked Moved General Discussion
6 Posts 3 Posters 44.5k 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.
  • Y
    Yasser Khalil
    last edited by Aug 17, 2017, 5:25 PM

    Hello everyone
    I have text file and I would like to search for lines that has specific partial strings and shows only the lines that has those strings

    Example:

    Please help me in this issue
    Thanks a lot for great help
    I receive help in this forum in great way. Please have a look
    You are great people
    Help me please
    in this line help is only exists
    these are some lines as an example
    these lines have to be searched by any string
    no case sensitive is required in search process

    I need to search for “pleas” and “help”


    The expected lines that would be displayed :

    Please help me in this issue
    I receive help in this forum in great way. Please have a look
    Help me please

    S 1 Reply Last reply Aug 17, 2017, 6:34 PM Reply Quote 0
    • S
      Scott Sumner @Yasser Khalil
      last edited by Aug 17, 2017, 6:34 PM

      @Yasser-Khalil

      A good way to get an answer would be to click here , but…

      …you can do it by searching this way:

      • Find-what box: (?-s)(?i)pleas.*help|help.*pleas
      • Search mode: Regular expression
      • Press Find All in Current Document button

      At that point your results will be shown in the Find result panel.

      1 Reply Last reply Reply Quote 0
      • Y
        Yasser Khalil
        last edited by Aug 17, 2017, 7:04 PM

        @Scott-Sumner said:

        (?-s)(?i)pleas.*help|help.*pleas

        Thank you very much scott for this great help
        But what if I need to search four or five strings … that would be confusing!!

        S 1 Reply Last reply Aug 17, 2017, 7:15 PM Reply Quote 0
        • S
          Scott Sumner @Yasser Khalil
          last edited by Aug 17, 2017, 7:15 PM

          @Yasser-Khalil said:

          search four or five strings

          Not so hard, one of the hits in the “here” link above explains it, but here is the basics of multiple-words-on-a-line-in-any-order searching:

          • 3 words: (?-s)(?=.*word1)(?=.*word2)(?=.*word3).*
          • 4 words: (?-s)(?=.*word1)(?=.*word2)(?=.*word3)(?=.*word4).*
          • 5 words: (?-s)(?=.*word1)(?=.*word2)(?=.*word3)(?=.*word4)(?=.*word5).*
          • etc.

          You can add \b before and after each word in your search if you truly want that exact word…and not words embedded in others…for example \btest\b will match test but not tester, testing, stoutest, etc.

          If this (or ANY posting on the Notepad++ Community site) is useful, don’t reply with a “thanks”, simply up-vote ( click the ^ in the ^ 0 v area on the right ).

          1 Reply Last reply Reply Quote 1
          • Y
            Yasser Khalil
            last edited by Aug 17, 2017, 7:54 PM

            Thank you very much for great and awesome help
            Best Regards

            1 Reply Last reply Reply Quote 0
            • G
              guy038
              last edited by guy038 Aug 20, 2017, 10:48 PM Aug 20, 2017, 10:46 PM

              Hello, @yasser-hhalil and @scott-sumner,

              Sorry, I’m not very reactive, cause I’m on holidays, in North Brittany, with my two sisters and their husbands. What to say ? We make a cure of seafood : cockles, periwinkles, clams, lobsters, crabs and even octopus ! To sum up : the Paradise ;-))Since one week, weather was quite fine, here, but today it was raining. So, I’m back to N++ and the Community, for a while !!


              Ah, @scott-sumner, very clever regex, found by Alin Purcaru, on Stackoverflow site !

              To complete this topic, let’s suppose we want to find all lines with the five first-names : jack, james, jason, jules and Joe

              Here are, below, four regexes, from the more restrictive behaviour to the less restrictive behaviour :

              • In regex A, rhe five first-names must be true words, in the exact lower case

              • In regex B, rhe five first-names must be true words, whatever their case

              • In regex C, rhe five first-names may be glued in bigger words, but with their exact lower case

              • In regex D, rhe five first-names may be glued in bigger words, whatever their case

              So :

              • Regex A = (?-is)^(?=.*\bjack\b)(?=.*\bjames\b)(?=.*\bjason\b)(?=.*\bjules\b)(?=.*\bjoe\b).*

              • Regex B = (?i-s)^(?=.*\bjack\b)(?=.*\bjames\b)(?=.*\bjason\b)(?=.*\bjules\b)(?=.*\bjoe\b).*

              • Regex C = (?-is)^(?=.*jack)(?=.*james)(?=.*jason)(?=.*jules)(?=.*joe).*

              • Regex D = (?i-s)^(?=.*jack)(?=.*james)(?=.*jason)(?=.*jules)(?=.*joe).*

              Notes :

              • As usual, the Regular expression search mode must be checked !

              • The initial modifiers force the search to be sensitive / insensitive ( -i / i ) to case, and also means that dot matches a single standard character only ( -s )

              • The ^ assertion, stands for the location beginning of line, where starts the test of the following features ( look-arounds )

              • Each form (?.*......) is a positive look-around, a condition which must be verified to get an overall match

              • If all conditions are true, the final regex is simply ^.*, so all contents of the line, from its beginning


              Then, if you copy/paste the following lines, in a new tab :

              01 james
              02 jason
              03 joe
              04 james and jack
              05 jason and jules
              06 jack, jason and joe
              07 peter, joe, jack, james and jules
              08 peter, jack, james, jason, jules and joe
              09 james, joe, jason, jules, jack and margaret
              10 peter, jules, james, jack, jason, joe and margaret
              11 joe, jules, jason, james and jack
              
              12 jAMes
              13 jASon
              14 jOE
              15 jAMes and JAck
              16 jASon and JUles
              17 jACk, jASOn and joe
              18 pETer, JOE, jack, jaMEs and JUles
              19 pETer, JACk, james, JAson, jULes and joe
              20 jAMes, JOE, jason, jULes, jaCK and margaret
              21 pETer, JULes, james, Jack, jASon, jOE and margaret
              22 jOE, juLES, jason, jAMes and Jack
              
              23 james
              24 jason
              25 joe
              26 james and jack
              27 jason and jules
              28 jack, jason and joe
              29 peter, 12joe34, jack, 56james78 and jules
              30 peter, 12jack34, james, 56jason78, jules and joe
              31 james, 12joe34, jason, 56jules78, jack and margaret
              32 peter, 12jules34, james, 56jack78, jason, joe and margaret
              33 joe, 12jules34, jason, 56james78 and jack
              
              34 jAMes
              35 jASon
              36 jOE
              37 jAMes and 12jack34
              38 jASon and jules
              39 jACk, 12jASOn34 and joe
              40 pETer, 12JOE34, jack, 56jaMEs78 and JUles
              41 pETer, 12JACk34, james, 56JAson78, jULes and 90joe12
              42 jAMes, 12JOE34, jason, 56jULes78, jaCK and margaret
              43 pETer, 12JULes34, james, 56Jack78, jASon, 90joe12 and margaret
              44 jOE, 12juLES34, jason, 56jAMes78 and 90Jack12
              

              You’ll easily notice that :

              • Regex A matches lines from 8 to 11

              • Regex B matches lines from 8 to 11 and from 19 to 22

              • Regex C matches lines from 8 to 11 and from 30 to 33

              • Regex D matches lines from 8 to 11, from 19 to 22, from 30 to 33 and from 41 to 44


              Now, from an already saved file, once you’ve got the results, in the Find Result panel, after clicking on the Find All in Current Document button, using one of regexes, above, you may, also, search for each individual first-name :

              • Right-click in the Find result panel

              • Select the Find in this finder… option

              Now, in the new Find in finder dialog :

              • Type a first-name, for instance jack, in the Find what: zone

              • Check the Search only on found lines option

              • Uncheck the two options Match whole word only and Match case

              • Select, if necessary, the Normal search mode

              • Click on the Find all button

              => A new Find resul tab is created and displays any occurrence of the string jack, found in the lines of the Find result panel, only !

              • Repeat these steps, changing for an other first-name, to get 5 Find resul tabs, all using the Line Filter Mode of search !

              IMPORTANT : If the Find result panel contains results, from a non-saved file ( with new # name ), the context option Find in this filder… does NOT seem to work ! I’ll add a post to @don-ho, to that purpose, very soon !

              Best Regards,

              guy038

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