Захват нескольких строк с помощью reg ex в Python - PullRequest
1 голос
/ 10 октября 2019

Я хотел бы написать регулярное выражение, которое захватывает строку "my_code" и две строки с отступом под ним только

//abs[matches(@class,"her")] 
  //abs[matches(@class,"him")]

я использовал my_code\n\s\s(.+)

my_code
  //abs[matches(@class,"her")] 
  //abs[matches(@class,"him")]
xxxx   //time
xxxxx   //h1

я использовал my_code\n\s\s(.+)

my_code
  //abs[matches(@class,"her")] 
  //abs[matches(@class,"him")]
xxxx   //time
xxxxx   //h1

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Мне удалось заставить его работать так:

test_str  = """ 
    my_code
      //abs[matches(@class,"her")] 
      //abs[matches(@class,"him")]
    xxxx   //time
    xxxxx   //h1
"""
pattern = re.compile('my_code\n\s+[^\n]+\n\s+[^\n]+')
res = re.search(pattern, test_str)
print(res.group())

Значения [^\n]+ соответствуют каждому символу, кроме новой строки, и должно быть 1 или более из этих символов. Это производит вывод как:

my_code
      //abs[matches(@class,"her")] 
      //abs[matches(@class,"him")]
0 голосов
/ 10 октября 2019

\s соответствует пробелу, а также символу новой строки.

Чтобы убедиться, что он имеет отступ, вы можете сопоставить 2 раза новую строку и 1 или более пробелов или табуляции [\t ]+, используя класс символов.

^my_code\r?\n[\t ]+.+\r?\n[ \t]+.+
  • ^ Начало строки
  • my_code\r?\n совпадение буквально сопровождается новой строкой
  • [\t ]+ Совпадение с 1+ пробелами или символами табуляции
  • .+ Совпадение 1+ раз с любым символом кроме новой строки
  • \r?\n[ \t]+.+ Снова совпадение с новой строкой, 1+ пробелами или символами табуляции и любым символом кроме новой строки

Regex demo

Чтобы сопоставить часть с отступом 1 или более раз, вы можете повторить группу без захвата и использовать квантификатор +

^my_code(?:\r?\n[\t ]+.+)+

Regex demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...