I need to find lines which contains multiple "-" in the same line leaving single "-" unmatched
INPUT
10 of hearts-2486329.svg
3d-model-3875350.svg
10 of spades-2486331.svg
3d-modeling-2869688.svg
OUTPUT:
3d-model-3875350.svg
3d-modeling-2869688.svg
CodePudding user response:
You're likely overthinking the problem here. If you want two -
with any number of characters in between, you can use:
-.*-
-
Matches a literal-
. This is where the match will start..*
Matches any number of any character-
Matches a literal-
again. This makes the match end at an occurrence of-
.- Because the
*
in the.*
part is a greedy quantifier, this match will end at the last occurrence of-
.
- Because the
The key thing we've done here is create an expression that only matches on lines with two or more -
. Now all we have to do is match to rest of the line. That's easy enough; we can just add .*
(any number of any character) to both sides of our expression, and whatever is surrounding our match will be included. Therefore, the final version is:
.*-.*-.*
Make sure to select "Regular expression" and unselect ". matches newline" in the "Search Mode" box in Notepad :
The ". matches newline" setting matters because .
means "any character" and if you check that box, it will allow it to match newline characters, too. The problem is that then the .*
on both sides of our expression will just match the whole document. We want to restrict the search to one line at a time.
If you don't have Notepad with you at the moment, and you'd like to test this solution out, you can do so at regex101, as Jon P has pointed out.
CodePudding user response:
Try this code, I just tested it
Find: ^((.*[-].*){2})|^(.*\n)
Replace all: $1