How to hide text after matching and before keyword in regular expressions?

Refresh

6 days ago

Views

20 time

0

I would like to match any user comment until KEYWORD. Also I would like to skip variable unimportant text after last comment before keyword.

import re`

string = '''
COMMENTS:  
first comment /user_x  
second comment
two lines /user_y
Here is some unimportant text.  
KEYWORD:
Don't match comments after keyword like this /user1  
'''

My result doesn't skip the unimportant text.

pattern = re.compile(r'(?<=COMMENTS:)(.+?/(user_x|user_y))+?(?:.+?)(?=KEYWORD:)', flags=re.DOTALL)
match = re.search(pattern, string).group(0)

print(match)

OUTPUT:
first comment /user_x  
second comment
in two lines /user_y
Here is some unimportant text.

What am I doing wrong? Thanks a lot

1 answers

0

Вы можете использовать

pattern = re.compile(r'COMMENTS:\s*((?:.+?/(?:user_x|user_y))+)(?=.+?KEYWORD:)', flags=re.DOTALL)
match = re.search(pattern, s)
if match:
    print(match.group(1))

Смотрите демо Python

подробности

  • COMMENTS: - буквальная подстрока
  • \s* - 0+ пробелы
  • ((?:.+?/(?:user_x|user_y))+)- Захват группы 1 ( match.group(1)будет удерживать это значение , если есть совпадение): один или более повторений
    • .+? - любые 1+ символы, как можно
    • /- это /символ
    • (?:user_x|user_y)- user_xилиuser_x
  • (?=.+?KEYWORD:)- должно быть KEYWORD:после любого 1 или более символов, как можно.