I have a list like following:
1.58%
0009
1991
/////////////////////////
Phil
ttr0018
1991
/////////////////////////
Now I want to join two last non-empty lines before /////////////////////////
lines like following (what output I want):
1.58%
0009 1991
/////////////////////////
Phil
ttr0018 1991
/////////////////////////
I tried following regex but not working:
Find : ^(\h*\S.*)(?=\R+(?:\h*\S.*\R+)?/{24})
Replace : \1
Where is problem?
Currently you are using a single match with a capture group in your regex, where the replacement with group 1 will give back the same result.
What yo might do is use 2 capture groups, and replace with $1 $2
^(\h*\S.*)(?:\R\h*)*\R(\h*\S.*)(?:\R\h*)*(?=\R/{24})
See a regex demo
Or a bit shorter, using $1 $2\n
in the replacement.
^(\h*\S.*)\R\s*^(\h*\S.*)\R\s*^(?=/{24})
The pattern matches:
(\h*\S.*)
Capture group 1, match optional leading horizontal whitespace chars, at least a non whitespace char and the rest of the line\R\s*^
Match a newline, optional whitespace chars and assert the start of the string(\h*\S.*)
Capture group 2, same pattern as group 1\R\s*^
Same as previous pattern(?=/{24})
Positive lookahead, assert 24 times a /
charSee another regex demo
As a side note, using ^(\h*\S.*)
can by itself also match only forward slashes.
If you want to prevent that, you could use for example a negative lookahead to assert not 24 times a forward slash
^(?!/{24})