Как сделать так, чтобы в группе захвата было больше 5 символов? - PullRequest
2 голосов
/ 05 октября 2019

Я использую этот код:

(?i)(?<!see )(?<!\d)(?<!")(?<!“)ITEM.*?1A.*?\n*(?<!")(?<!“)RISK.*?FACTORS(?<!")\n*([\s\S]*?)\n*ITEM.*?1B

Это захват текста, который находится между ITEM 1A. RISK FACTORS и ITEM 1B., но как я могу захватить группу захвата только сболее 5 символов?

Полная строка:

ITEM 1A.    RISK FACTORS

123

ITEM 1B.

ITEM 1A.    RISK FACTORS

In addition to other information in this Form 10-K, the following risk factors should be carefully considered in evaluating us and our business because these factors currently have a significant impact or 

ITEM 1B.

Итак, желаемая группа захвата будет:

In addition to other information in this Form 10-K, the following risk factors should be carefully considered in evaluating us and our business because these factors currently have a significant impact or 

, а не:

123

Ответы [ 2 ]

3 голосов
/ 06 октября 2019

Подсчет выполняется близко к таким данным.
Может значительно сократить регулярное выражение, заменив [^\S\r\n] на \h, если необходимо.
Группа 1 содержит усеченные данные.

(?sm)^[^\S\r\n]*ITEM[^\S\r\n]+1A[^\S\r\n]*\.[^\S\r\n]+RISK[^\S\r\n]+FACTORS[^\S\r\n]*\r?\n\s*(\S(?:(?!^[^\S\r\n]*ITEM).){3,}?\S)\s*^[^\S\r\n]*ITEM[^\S\r\n]+1B[^\S\r\n]*\.

https://regex101.com/r/ChQseo/1

Расширенный

 (?sm)
 ^ [^\S\r\n]* ITEM [^\S\r\n]+ 1A [^\S\r\n]* \. 
 [^\S\r\n]+ RISK [^\S\r\n]+ FACTORS [^\S\r\n]* \r? \n 

 \s* 
 (                             # (1 start)
      \S 
      (?:
           (?! ^ [^\S\r\n]* ITEM )
           . 
      ){3,}?
      \S 
 )                             # (1 end)
 \s* 

 ^ [^\S\r\n]* ITEM [^\S\r\n]+ 1B [^\S\r\n]* \.
0 голосов
/ 05 октября 2019

Я предполагаю, что, возможно,

(?i)(?<!see )(?<!\d)(?<!")(?<!“)ITEM.*?1A.*?\n*(?<!")(?<!“)RISK.*?FACTORS(?<!")\n*([^\r\n]{5,}?)\s*\n*ITEM.*?1B

может быть несколько близко к тому, что вы имеете в виду, хотя и не уверен.

Возможно также работать с флагом re.DOTALL:

import re

regex = r'(?i)(?<!see )(?<!\d)(?<!")(?<!“)ITEM.*?1A.*?\n*(?<!")(?<!“)RISK.*?FACTORS(?<!")\n*([^\r\n]{5,}?)\s*\n*ITEM.*?1B'
string = '''

ITEM 1A.    RISK FACTORS

123

ITEM 1B.

ITEM 1A.    RISK FACTORS

In addition to other information in this Form 10-K, the following risk factors should be carefully considered in evaluating us and our business because these factors currently have a significant impact or 

ITEM 1B.

'''

print(re.findall(regex, string, re.DOTALL))

Вывод

['В дополнение к другой информации в этой форме 10-KСледующие факторы риска должны быть тщательно рассмотрены при оценке нас и нашего бизнеса, потому что эти факторы в настоящее время оказывают значительное влияние или ']


Если вы хотите упростить / изменить / изучить выражение,это было объяснено на верхней правой панели regex101.com . Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами ввода.


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