Home > Software design >  Regex to find comments with a word inside them
Regex to find comments with a word inside them

Time:11-15

I have the next regex:

comment_pattern = "(/\*[\w\W]*\*/)"

With it I am able to search match strings like bellow:

/*
blablabla example 
blabla
*/

Basically I would also like to search in those comments for the variable Compiler_Warning -> in case its inside a multiline comment to get all the expression-> Can some one tell me how to get it. Basically my regex should return a match for :

/* blabla
Compiler_Warning blablalba
*/

But not for the first example.

CodePudding user response:

Try (regex demo):

import re

text = """\
/*
blablabla example 
blabla
*/

Not comment

/* blabla
Compiler_Warning blablalba
*/"""

pat = re.compile(r"/\*(?=(?:(?!\*/).)*?Compiler_Warning).*?\*/", flags=re.S)

for comment in pat.findall(text):
    print(comment)

Prints:

/* blabla
Compiler_Warning blablalba
*/

CodePudding user response:

If you don't want to cross matching /* and */ in between the start and ending in your examples:

(?s)/\*(?:(?!\*/|/\*).)*?\bCompiler_Warning\b(?:(?!\*/|/\*).)*\*/

Explanation

  • (?s) Inline modifier to have the dot also match a newline
  • /\* Match /*
  • (?:(?!\*/|/\*).)*? Match any character if not directly followed by */ or /*
  • \bCompiler_Warning\b Match literally between word boundaries
  • (?:(?!\*/|/\*).)* Match any character if not directly followed by */ or /*
  • \*/ Match */

See a regex demo and a Python demo

  • Related