Python Regex не соответствует некоторому тексту - PullRequest
1 голос
/ 30 октября 2019

У меня есть следующий код, который соответствует почти всему, что мне нужно.

import re
rx_sequence=re.compile(r"^(\d+:\s*\(\*\s*T.+)(?:\n?)((?:(?:\n|\r\n?).+)+)", re.MULTILINE)
text="""
2:(* Test #1 :: trj6tkjtkjty7ry7kyrukjkuy*)

  rtjtyjtryjtrkjyryukryukrkuy
test3test3test3test3test3test3+1;

3:(* Test3:: test3test3test3test3test3 *)

  Twwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwing test69test69';
tyjtdyjtdyjnrdtyntrdyntyntyn

69:(* Ttest69test69:test69test69 *)
  (*test69test69test69test69test69test69test69test69test69test6940: (* Finish Test case *)

    bTestDone := TRUE;

  40: (* Finish Test case *)

    bTestDone := TRUE;


  END_CASE;
  END_CASE;



(**********test10test10test10test10test10**************************)
10: (* Test10test10test10test10test10test10test10test10test10test10test10 *)

  test10[test10] := 'test10'; 
  (* petest10test10test10test10test10test10test10test10 *)  
  btest10test10e := TRUE;

  (* Run Sih';io0;'ioh;ui;oi;io;io;anageState OF

"""
for match in rx_sequence.finditer(text):
    title, sequence = match.groups()
    title = title.strip()
    print ("Title:\n",title)
    print ("\nSequence===========================================================================================:",sequence)
    print ("\n\n")

Мое регулярное выражение не совпадает с частью тела случая 69 и последней строкойв случае 10. Я пытался придумать регулярное выражение, которое соответствует всем, но не повезло ... Я не уверен, что делать дальше.

1 Ответ

1 голос
/ 30 октября 2019

Вы можете обновить вторую часть вашего паттерна, чтобы она соответствовала следующим строкам, которые не начинаются с паттерна, совпадающего в начале.

^(\d+:\s*\(\*\s*T.+)(?:\r?\n(?!^\d+:\s*\(\*\s*T).*)*

О второй части (?:\r?\n(?!^\d+:\s*\(\*\s*T).*)*

  • (?: Группа без захвата
    • \r?\n
    • (?!^\d+:\s*\(\*\s*T) Если справа не образец, обозначающий начало
    • .* Соответствовать любому символу 0+ раз, кроме новой строки
  • )* Закрыть группу без захвата

Regex demo

Вы также можете обернуть вторую часть в группу захвата, если хотите иметь в общей сложности 2 группы.

regex demo с 2 группами захвата

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