I try using the following to search some text and replace it by some other text starts with #. On regex101 it works fine but NotePad says search failed. Also tried to add \r before \n but didn't help.
regex: (class boy(?:.*\n) \s*)(Height.*;\n)((?:.*\n) })
Text to search:
class boy Mike
{
Age = 20;
PhoneNum = 658965;
Height = 198;
City = LA
}
note boy Joe
{
Age = 21;
PhoneNum = 558565;
Height = 178;
City = BA
}
class boy Joe
{
Age = 21;
PhoneNum = 558565;
Height = 178;
City = BA
}
Substitute:
$1#$2$3
Output:
class boy Mike
{
Age = 20;
PhoneNum = 658965;
#Height = 198;
City = LA
}
note boy Joe
{
Age = 21;
PhoneNum = 558565;
Height = 178;
City = BA
}
class boy Joe
{
Age = 21;
PhoneNum = 558565;
#Height = 178;
City = BA
}
CodePudding user response:
You can use
Find What: ^class boy.*(?:\R(?!}$).*)*\R\K(?=Height)
Replace With: #
.
matches newline: DISABLED
Details:
^
- start of lineclass boy
-class boy
and then any zero or more chars as few as possible.*
- the rest of line(?:\R(?!}$).*)*
- zero or more lines up to end of file or to a line that is equal to}
\R
- a line break sequence\K
- omit the text matched(?=Height)
- immediately on the right, there must beHeight
.
CodePudding user response:
Another alternative ...
Find;(class[\s\S] ?(?!note))(height)
Replace all: $1#$2
CodePudding user response:
I have rewritten you regex so it doesn't use newline
:
(?<=class boy \w \s*\{[^}] ?)(Height[^;] ;)(?=[\s\S] ?\})
Use 'global' and 'multiline' options.
Replace with:
#$1
Explanation:
(?<=class boy \w \s*\{[^}] ?)
look behind for:class boy
, a space and one or more word characters followed by one ore more white space (that includes newline). Then look for {
followed by one or more characters not being }
.
(Height[^;] ;)
match 'Heigth' followed by one or more character not being ;
- put the match in group 1.
(?=[\s\S] ?\})
look forward for any character followed by }
.
Replace with #
and group 1.