regex stop searching after '%' is found












0















import re
x=r'Biblioteca_Nacional_de_Espa%C3%B1a'
y=re.compile('[A-Za-z_](?!%)')
for i in y.findall(x):
print(i,end='')


this is an example,i want the search to stop as soon as it finds % and print the previous words between them spaces in this example it should Biblioteca Nacional de Espa,i found this link Regex stop searching at specific string but it was too complicated,any help is appreciated










share|improve this question























  • Possible duplicate of Regex excluding specific characters

    – CertainPerformance
    Nov 25 '18 at 8:38











  • Your input does not have spaces?

    – trincot
    Nov 25 '18 at 8:39






  • 1





    Why not just clip the part from the first %, and only then get the words? x.split("%", 1)[0].split()

    – trincot
    Nov 25 '18 at 8:41











  • Why not use [^%]+ and capture the first element in array?

    – Pushpesh Kumar Rajwanshi
    Nov 25 '18 at 9:12
















0















import re
x=r'Biblioteca_Nacional_de_Espa%C3%B1a'
y=re.compile('[A-Za-z_](?!%)')
for i in y.findall(x):
print(i,end='')


this is an example,i want the search to stop as soon as it finds % and print the previous words between them spaces in this example it should Biblioteca Nacional de Espa,i found this link Regex stop searching at specific string but it was too complicated,any help is appreciated










share|improve this question























  • Possible duplicate of Regex excluding specific characters

    – CertainPerformance
    Nov 25 '18 at 8:38











  • Your input does not have spaces?

    – trincot
    Nov 25 '18 at 8:39






  • 1





    Why not just clip the part from the first %, and only then get the words? x.split("%", 1)[0].split()

    – trincot
    Nov 25 '18 at 8:41











  • Why not use [^%]+ and capture the first element in array?

    – Pushpesh Kumar Rajwanshi
    Nov 25 '18 at 9:12














0












0








0








import re
x=r'Biblioteca_Nacional_de_Espa%C3%B1a'
y=re.compile('[A-Za-z_](?!%)')
for i in y.findall(x):
print(i,end='')


this is an example,i want the search to stop as soon as it finds % and print the previous words between them spaces in this example it should Biblioteca Nacional de Espa,i found this link Regex stop searching at specific string but it was too complicated,any help is appreciated










share|improve this question














import re
x=r'Biblioteca_Nacional_de_Espa%C3%B1a'
y=re.compile('[A-Za-z_](?!%)')
for i in y.findall(x):
print(i,end='')


this is an example,i want the search to stop as soon as it finds % and print the previous words between them spaces in this example it should Biblioteca Nacional de Espa,i found this link Regex stop searching at specific string but it was too complicated,any help is appreciated







python regex python-3.x






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 25 '18 at 8:36









wishmasterwishmaster

1589




1589













  • Possible duplicate of Regex excluding specific characters

    – CertainPerformance
    Nov 25 '18 at 8:38











  • Your input does not have spaces?

    – trincot
    Nov 25 '18 at 8:39






  • 1





    Why not just clip the part from the first %, and only then get the words? x.split("%", 1)[0].split()

    – trincot
    Nov 25 '18 at 8:41











  • Why not use [^%]+ and capture the first element in array?

    – Pushpesh Kumar Rajwanshi
    Nov 25 '18 at 9:12



















  • Possible duplicate of Regex excluding specific characters

    – CertainPerformance
    Nov 25 '18 at 8:38











  • Your input does not have spaces?

    – trincot
    Nov 25 '18 at 8:39






  • 1





    Why not just clip the part from the first %, and only then get the words? x.split("%", 1)[0].split()

    – trincot
    Nov 25 '18 at 8:41











  • Why not use [^%]+ and capture the first element in array?

    – Pushpesh Kumar Rajwanshi
    Nov 25 '18 at 9:12

















Possible duplicate of Regex excluding specific characters

– CertainPerformance
Nov 25 '18 at 8:38





Possible duplicate of Regex excluding specific characters

– CertainPerformance
Nov 25 '18 at 8:38













Your input does not have spaces?

– trincot
Nov 25 '18 at 8:39





Your input does not have spaces?

– trincot
Nov 25 '18 at 8:39




1




1





Why not just clip the part from the first %, and only then get the words? x.split("%", 1)[0].split()

– trincot
Nov 25 '18 at 8:41





Why not just clip the part from the first %, and only then get the words? x.split("%", 1)[0].split()

– trincot
Nov 25 '18 at 8:41













Why not use [^%]+ and capture the first element in array?

– Pushpesh Kumar Rajwanshi
Nov 25 '18 at 9:12





Why not use [^%]+ and capture the first element in array?

– Pushpesh Kumar Rajwanshi
Nov 25 '18 at 9:12












1 Answer
1






active

oldest

votes


















1














Your regex [A-Za-z_](?!%) matches a single character in your character set that is not followed by %. Due to which it will not print just a and 3 that appear just before % character and print rest every character in character set. But don't think you want that as your intended output is Biblioteca Nacional de Espa



You can use this regex,



(?<!%)([a-zA-Z]+)(?=.*%)


and find all matching inputs. Here is a sample python code,



import re
x=r'Biblioteca_Nacional_de_Espa%C3%B1a'
y=re.compile('(?<!%)([a-zA-Z]+)(?=.*%)')
tokens = y.findall(x)
print(' '.join(tokens))


It prints,



Biblioteca Nacional de Espa


In case you had a typo in your post and indeed wanted to capture Biblioteca_Nacional_de_Espa, then you just have to retain underscore (that I removed) in your character set and the regex becomes,



(?<!%)([a-zA-Z_]+)(?=.*%)


And your python code becomes,



import re
x=r'Biblioteca_Nacional_de_Espa%C3%B1a'
y=re.compile('(?<!%)([a-zA-Z_]+)(?=.*%)')
tokens = y.findall(x)
print(' '.join(tokens))


which outputs,



Biblioteca_Nacional_de_Espa





share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53465880%2fregex-stop-searching-after-is-found%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    1














    Your regex [A-Za-z_](?!%) matches a single character in your character set that is not followed by %. Due to which it will not print just a and 3 that appear just before % character and print rest every character in character set. But don't think you want that as your intended output is Biblioteca Nacional de Espa



    You can use this regex,



    (?<!%)([a-zA-Z]+)(?=.*%)


    and find all matching inputs. Here is a sample python code,



    import re
    x=r'Biblioteca_Nacional_de_Espa%C3%B1a'
    y=re.compile('(?<!%)([a-zA-Z]+)(?=.*%)')
    tokens = y.findall(x)
    print(' '.join(tokens))


    It prints,



    Biblioteca Nacional de Espa


    In case you had a typo in your post and indeed wanted to capture Biblioteca_Nacional_de_Espa, then you just have to retain underscore (that I removed) in your character set and the regex becomes,



    (?<!%)([a-zA-Z_]+)(?=.*%)


    And your python code becomes,



    import re
    x=r'Biblioteca_Nacional_de_Espa%C3%B1a'
    y=re.compile('(?<!%)([a-zA-Z_]+)(?=.*%)')
    tokens = y.findall(x)
    print(' '.join(tokens))


    which outputs,



    Biblioteca_Nacional_de_Espa





    share|improve this answer




























      1














      Your regex [A-Za-z_](?!%) matches a single character in your character set that is not followed by %. Due to which it will not print just a and 3 that appear just before % character and print rest every character in character set. But don't think you want that as your intended output is Biblioteca Nacional de Espa



      You can use this regex,



      (?<!%)([a-zA-Z]+)(?=.*%)


      and find all matching inputs. Here is a sample python code,



      import re
      x=r'Biblioteca_Nacional_de_Espa%C3%B1a'
      y=re.compile('(?<!%)([a-zA-Z]+)(?=.*%)')
      tokens = y.findall(x)
      print(' '.join(tokens))


      It prints,



      Biblioteca Nacional de Espa


      In case you had a typo in your post and indeed wanted to capture Biblioteca_Nacional_de_Espa, then you just have to retain underscore (that I removed) in your character set and the regex becomes,



      (?<!%)([a-zA-Z_]+)(?=.*%)


      And your python code becomes,



      import re
      x=r'Biblioteca_Nacional_de_Espa%C3%B1a'
      y=re.compile('(?<!%)([a-zA-Z_]+)(?=.*%)')
      tokens = y.findall(x)
      print(' '.join(tokens))


      which outputs,



      Biblioteca_Nacional_de_Espa





      share|improve this answer


























        1












        1








        1







        Your regex [A-Za-z_](?!%) matches a single character in your character set that is not followed by %. Due to which it will not print just a and 3 that appear just before % character and print rest every character in character set. But don't think you want that as your intended output is Biblioteca Nacional de Espa



        You can use this regex,



        (?<!%)([a-zA-Z]+)(?=.*%)


        and find all matching inputs. Here is a sample python code,



        import re
        x=r'Biblioteca_Nacional_de_Espa%C3%B1a'
        y=re.compile('(?<!%)([a-zA-Z]+)(?=.*%)')
        tokens = y.findall(x)
        print(' '.join(tokens))


        It prints,



        Biblioteca Nacional de Espa


        In case you had a typo in your post and indeed wanted to capture Biblioteca_Nacional_de_Espa, then you just have to retain underscore (that I removed) in your character set and the regex becomes,



        (?<!%)([a-zA-Z_]+)(?=.*%)


        And your python code becomes,



        import re
        x=r'Biblioteca_Nacional_de_Espa%C3%B1a'
        y=re.compile('(?<!%)([a-zA-Z_]+)(?=.*%)')
        tokens = y.findall(x)
        print(' '.join(tokens))


        which outputs,



        Biblioteca_Nacional_de_Espa





        share|improve this answer













        Your regex [A-Za-z_](?!%) matches a single character in your character set that is not followed by %. Due to which it will not print just a and 3 that appear just before % character and print rest every character in character set. But don't think you want that as your intended output is Biblioteca Nacional de Espa



        You can use this regex,



        (?<!%)([a-zA-Z]+)(?=.*%)


        and find all matching inputs. Here is a sample python code,



        import re
        x=r'Biblioteca_Nacional_de_Espa%C3%B1a'
        y=re.compile('(?<!%)([a-zA-Z]+)(?=.*%)')
        tokens = y.findall(x)
        print(' '.join(tokens))


        It prints,



        Biblioteca Nacional de Espa


        In case you had a typo in your post and indeed wanted to capture Biblioteca_Nacional_de_Espa, then you just have to retain underscore (that I removed) in your character set and the regex becomes,



        (?<!%)([a-zA-Z_]+)(?=.*%)


        And your python code becomes,



        import re
        x=r'Biblioteca_Nacional_de_Espa%C3%B1a'
        y=re.compile('(?<!%)([a-zA-Z_]+)(?=.*%)')
        tokens = y.findall(x)
        print(' '.join(tokens))


        which outputs,



        Biblioteca_Nacional_de_Espa






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 25 '18 at 9:57









        Pushpesh Kumar RajwanshiPushpesh Kumar Rajwanshi

        9,28321029




        9,28321029
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53465880%2fregex-stop-searching-after-is-found%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Create new schema in PostgreSQL using DBeaver

            Deepest pit of an array with Javascript: test on Codility

            Costa Masnaga