for regex - is it possible to move a word from the beginning of the line to the end of the line?



  • everyone. is it possible to move a word from the beginning of the line to the end of the line, and the one from the end to be place at the beginning of the line? It’s a change of places, viceversa

    For example:

    Paul is at home with his brother John.

    Must become:

    John is at home with his brother Paul.

    can this be done with regex?



  • I try this regex, but not a great solution:

    (^\w+) - select the first word on the beginning of each line
    (\w*$) - select the last word at the end of the line

    Search: (^\w+).*?(\w*$)
    Replace by: \2\1



  • @Robin-Cruise

    This seems to work for your data, but there’s probably more to what you really need:

    find: (?-s)^(\w+)(.*?)(\w+)\.
    repl: \3\2\1.



  • find : ^(\w+)\s(.*)\s(\w+)(\.)?
    replace with : $3\x20$2\x20$1$4



  • thank you all. Of course, in the end I find myself a solution:

    Search: (^\w+)(.*?)(\w*)\.$
    Replace by: \3\2\1.



  • Hello, @robin-cruise, and All,

    I suppose that, if the sentence contains a single word, followed with a full stop like Paul., it should not be concerned by the replacement, ins’t it ?

    So, the correct regex S/R is :

    SEARCH (?-s)^(\w+)\b(.+)\b(\w+)\.$

    REPLACE \3\2\1.

    Notes :

    • The \b assertions ensure that the group \1 and group 3 contain true words, i.e. the first and last character of group 2 are non-word characters

    • In group 2 we just can use a greedy quantifier + ( not +? ) as we’re looking for the last word of current line, anyway !

    • As the search regex contains three expressions with the + quantifier, this means that each group is not empty. And, in case of the minimal sentence Paul John., the group 2 is just the space char between the two firstnames !

    Best Regards,

    guy038


Log in to reply