множественный выбор с использованием регулярных выражений - PullRequest
0 голосов
/ 11 мая 2018

HI У меня есть несколько шаблонов должны быть извлечены. Мои стартовые и конечные маркеры имеют разные комбинации. Может содержать

ITEM 3              Quantitative and Qualitative Disclosures about Market Risk
As part of its Bank Credit  Agreement,  the Company was  required to purchase an
interest rate cap of $100 million for 
item 4 

или это может быть

item 3.            Quantitative and Qualitative Disclosures about Market Risk
As part of its Bank Credit  Agreement,  the Company was  required to purchase an
interest rate cap of $100 million for 
item 4

или это может быть

item 3a              Quantitative and Qualitative Disclosures about Market Risk
As part of its Bank Credit  Agreement,  the Company was  required to purchase an
interest rate cap of $100 million for 
item 4

Я использую регулярное выражение в качестве

qaq =r"item[^a-zA-Z\n]*\d\s*\.\s*Quantitative and Qualitative Disclosures about Market Risk.*?item[^a-zA-Z\n]*\d\s*\.*"

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

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

В своем регулярном выражении вы используете [^a-zA-Z\n]*, чтобы сопоставить то, что находится между item и цифрой. В этом случае я думаю, что вы могли бы использовать \s вместо.

В начале у вас есть item 3, item 3. и item 3a. Вы используете \d\s*\. для соответствия этим 3 вариантам, но это будет соответствовать только 3.

Вы можете сопоставить варианты item в начале, используя флаг без учета регистра или указать регистр без учета модификатора (?i) и добавить многострочный режим (?m).

(?im)^item\s\d+[a-z.]?\s+Quantitative and Qualitative Disclosures about Market Risk\n(?:.*\n)*?item\s\d+$

подробности

  • ^ Утверждение начала строки
  • item\s\d+ Соответствующий элемент, за которым следуют символ пробела и одна или несколько цифр
  • [a-z.]?\s+ Соответствует необязательному строчному символу или точке, за которой следуют одна или несколько цифр
  • Quantitative and Qualitative Disclosures about Market Risk\n Совпадение буквально сопровождается символом новой строки
  • (?:.*\n)*? Повторите любой символ ноль или более раз, за ​​которым следует новая строка, потому что точка не соответствует разрывам строки по умолчанию
  • item\s\d+ Соответствующие элементы, пробельные символы и одна или несколько цифр
  • $ Утверждение конца строки

Демо Python

0 голосов
/ 11 мая 2018

Regex:

^(?:ITEM|Item|item)\s\d[a-z]?\.?\s*Quantitative and Qualitative Disclosures about Market Risk(?:.*\n)*?item\s\d.*$

Демо

Пояснение:

(?:ITEM|Item|item) - альтернативная группа без захвата для обработки item в различных случаях.

(?:.*\n)*?item\s\d.*$ - группа без захвата из любого количества символов, за которым следует \n повторение нуля до неограниченного количества раз ленивым образом *?, за которым следуют строчные буквы item с последующим пробелом, за которым следует цифра, за которой следует любой символ ( От 0 до неограниченного) с последующим концом строки $

...