Как сделать регулярное выражение нежадным, чтобы извлечь конкретный элемент - PullRequest
2 голосов
/ 07 июня 2019

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

Restricted Cash 951 37505 Accounts Receivable - Affiliate 31613 27539 Accounts
 Receivable - Third Party 23091 2641 Crude Oil Inventory 2200 0 Other Current
 Assets 2724 389 
Total Current Assets 71319 86100 Property Plant and Equipment Total Property 
Plant and Equipment Gross 1500609 706039 Less Accumulated 
Depreciation and Amortization (79357) (44271) Total Property Plant and Equipment
 Net 1421252 661768 Intangible Assets Net 310202 0 Goodwill 109734 0 Investments
 82317 80461 Other Noncurrent Assets 3093 1429 Total Assets 1997917 829758 
LIABILITIES Current Liabilities Accounts Payable - Affiliate 2778 1616 Accounts
 Payable - Trade 92756 109893 Other Current Liabilities 9217 2876 Total Current
 Liabilities 104751 114385 Long-Term Liabilities Long-Term Debt 559021 85000
 Asset Retirement Obligations 17330 10416 Other Long-Term Liabilities 582 3727 
Total Liabilities 681684 213528 EQUITY Partners' Equity Limited Partner 
Common Units (23759 and 23712 units outstanding respectively) 699866 642616
 Subordinated Units (15903 units outstanding) (130207) (168136) General Partner 2421 520 
Total Partners' Equity 572080 475000 Noncontrolling Interests 744153 141230 Total 
Equity 1316233 616230 Total Liabilities and Equity 1997917 829758

Мне нужно удалить все фразы, которые были бы в скобках, т. Е. (), А также содержали бы число со словом выдающимися или единицами.

Исходя из этих условий, у меня есть две фразы, которые необходимо удалить:

  1. (23759 и 23712 единиц в обращении соответственно)
  2. (15903 единицы в обращении)

Я пробовал следующее регулярное выражение в Python:

\(\d+.+?(outstanding)+?\)

Идея заключалась в том, что .+? после \d+ сделает Regex нежадным (ленивым). Однако регулярное выражение выбирает огромный сегмент, начиная с (79357) (44271) Total Property Plant and Equipment до outstanding), что является жадным.

Уникальный маркер здесь - это слово outstanding, может быть, есть лучший подход к извлечению этих фраз?

1 Ответ

1 голос
/ 07 июня 2019

Вы можете использовать

\(\d[^()]*outstanding[^()]*\)

См. Демонстрацию регулярных выражений и график регулярных выражений :

enter image description here

Подробности

  • \( - ( char
  • \d - цифра
  • [^()]* - 0+ символов, кроме ( и )
  • outstanding - подстрока
  • [^()]* - 0+ символов, отличных от ( и )
  • \) - ) char.

Python:

re.findall(r'\(\d[^()]*outstanding[^()]*\)', s)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...