Regex end of line replace

I want to replace the end of a line on line with ';' but only on lines that do not already end in ';'. I came up with the following to put in the replace dialog:

Find What = '[^\;]\r\n'
Replace with = '\;\r\n'

My problem is that this also selects the last character of a line. I don't want to replace the last character... just the carriage return.

Any ideas on how to correct this?

2

3 Answers

Your regex as it stands will replace the whole end of the line, so the best bet is to take the whole line, check it for a semi, and only replace the section that needs it (eg add a semi).

(.*)([^\;])(\r\n)

is an expression with 3 capture groups:

  • (.*) -- the first part of the line
  • ([^\;]) -- the check for the missing semi
  • (\r\n) -- the line ending

So, we can take the first group, add a semi, and then take the last group to get the full line, with the only difference being the semi itself.

the replace expression \1\;\3 will concatenate together the first group, a semi, and the last group.

Note that the \# syntax is common to Notepad++ and some other tools, but is not universal (many use $1, $2,...$n). be sure to check your editors documentation.

0

Use

Find What: ([^\;])\r\n
Replace with: $1;\r\n

It will replace the last character with the same character + ';' unless it is ';'

Also, in 'replace' '\' is not needed before ';'

  • Ctrl+H
  • Find what: (?<!;)$
  • Replace with: ;
  • check Wrap around
  • check Regular expression
  • Replace all

Explanation:

(?<! # negative lookbehind, zero-length assertion that make sure we haven't before current position: ; # a semicolon
) # end lookbehind
$ # end of line

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like