Поиск нескольких повторяющихся шаблонов текста с использованием регулярных выражений - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь найти тексты из документа, которые имеют повторяющиеся фрагменты и встречаются в документе несколько раз. Однако, используя regex.match, он показывает только первое совпадение из документа, а не др.

Шаблоны, которые я хочу найти, выглядят так:

clauses 5.3, 12 & 15
clause 10 C, 10 CA & 10 CC

Следующая строка показывает регулярное выражение, которое я использую.

regex_crossref_multiple_1=r'(clause|Clause|clauses|Clauses)\s*\d+[.]?\d*\s*[a-zA-Z]*((,|&|and)\s*\d+[.]?\d*\s*[A-Z]*)+'

Код, используемый для сопоставления, и результаты показаны ниже:

cross=regex.search(regex_crossref_multiple_1,des)

(des - строка, содержащая текст)

Для печати результатов я использую print(cross.group()).

Результат:

clauses 5.3, 12 & 15

Однако есть и другие шаблоны, в которых я не являюсь получение результата.

Пожалуйста, дайте мне знать, в чем может быть проблема.

Строка ввода (des) находится по следующей ссылке.

https://docs.google.com/document/d/1LPmYaD6VE724OYoXDGPfInvx8WTu5JfrTqTOIv8zAlg/edit?usp=sharing

In case, the contractor completes the work ahead of stipulated date of
completion or justified extended date of completion as determined
under clauses 5.3, 12 & 15, a bonus @ 0.5 % (zero point five per cent) of
the tendered value per month computed on per day basis, shall be
payable to the contractor, subject to a maximum limit of 2 % (two
percent) of the tendered value. Provided that justified time for extra
work shall be calculated on pro-rata basis as cost of extra work excluding
amount payable/ paid under clause 10 C, 10 CA & 10 CC  X stipulated
period /tendered value. The amount of bonus, if payable, shall be paid
along with final bill after completion of work. Provided always that
provision of the Clause 2A shall be applicable only when so provided in
‘Schedule F’

1 Ответ

0 голосов
/ 24 февраля 2020

Вы можете сопоставить clauses с последующей необязательной частью цифр и необязательными символами AZ, а затем использовать повторяющийся шаблон для сопоставления необязательной следующей запятой и цифр.

Для последней части шаблона вы можете по желанию выбрать либо ,, & или and, а затем ди git и дополнительные символы AZ.

\b[Cc]lauses?\s+\d+(?:\.\d+)?(?:\s*[A-Z]+)?(?:,\s+\d+(?:\.\d+)?(?:\s*[A-Z]+)?)*(?:\s+(?:[,&]|and)\s+\d+(?:\.\d+)?(?:\s*[A-Z]+)?)?\b

Пояснение

  • \b Граница слова
  • [Cc]lauses?\s+\d+(?:\.\d+)? Соответствуют предложениям, за которыми следуют цифры и дополнительная десятичная часть
  • (?:\s*[A-Z]+)? Опционально совпадать с пробелами и 1+ символами AZ
  • (?: без захвата группы
    • ,\s+\d+(?:\.\d+)? совпадать с запятой, цифрами и необязательной десятичной частью
    • (?:\s*[A-Z]+)? При желании сопоставлять пробелы символы и 1+ символов AZ
  • )* Закрыть группу и повторить 0+ раз
  • (?: Не захватывать группу
    • \s+(?:[,&]|and) Матч 1+ пробельных символов и либо ,, & или and
    • \s+\d+(?:\.\d+)? совпадение 1+ пробельные символы, 1+ цифры с необязательной десятичной частью
    • (?:\s*[A-Z]+)? совпадение дополнительные пробельные символы и 1+ символы AZ
  • )? Закрыть группу и сделать необязательным
  • \b Граница слова
* 1 061 * Regex demo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...