Разбор специального символа '()' с помощью регулярных выражений - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь разобрать текст из документа с помощью регулярных выражений.Документ содержит другую структуру, то есть раздел 1.2, раздел (1).Ниже регулярное выражение может анализировать текст с десятичной запятой, но не для ().

Любое предложение по обработке содержимого, начинающееся с ().

Например:

import re
RAW_Data = '(4) The Governor-General may arrange\n with the Chief Minister of the Australian Capital Territory for the variation or revocation of an \n\narrangement in force under subsection (3). \nNorthern Territory \n (5) The Governor-General may make arrangements with the \nAdministrator of the Northern \nTerritory with respect to the'

f = re.findall(r'(^\d+\.[\d\.]*)(.*?)(?=^\d+\.[\d\.]*)', RAW_Data,re.DOTALL|re.M|re.S)
for z in f:
    z=(''.join(z).strip().replace('\n',''))
    print(z)

Ожидаемый результат:

(4) Губернатор-Генерал может договориться с главным министром австралийской столичной территории об изменении или отзыве действующего соглашения в соответствии с подразделом

(3) Северная территория

(5) Генерал-губернатор может сделатьдоговоренности с администратором Северной территории в отношении "

Ответы [ 3 ]

0 голосов
/ 08 октября 2018

Использовать регулярное выражение, [sS]ection\s*\(?\d+(?:\.\d+)?\)?

Значение (?\d+(?:\.\d+)?\)? будет соответствовать любому числу с десятичной дробью или без нее или фигурной скобкой

Регулярное выражение

0 голосов
/ 09 октября 2018

Новый RegEx \(\d\)[^(]+

  1. \(\d\) соответствует любой строке как (1) (2) (3) ...
  2. [^(]+ сопоставить один или несколько символов и прекратить сопоставление при обнаружении (

    проверить на: на Regex101

НоИнтересно, есть ли у вас особый пример, например (4) The Governor-General may arrange\n with the Chief Minister of the Austr ... (2) (3). \nNorthern Territory \n?Это предложение от (4) to (2).Потому что мое регулярное выражение не может соответствовать этому типу предложений.

0 голосов
/ 08 октября 2018

Вы можете попробовать:

(?<=(\(\d\)|\d\.\d))(.(?!\(\d\)|\d\.\d))*

Чтобы понять, как это работает, рассмотрите следующий блок:

(\(\d\)|\d\.\d)

Он ищет строки типа (X) или X.Y, где X и Y - числа.Давайте назовем такую ​​строку разделителями.

Теперь приведенное выше регулярное выражение ищет первый символ, которому предшествует разделитель (положительный вид сзади), и сопоставляет следующие символы, пока не найдет тот, за которым следует разделитель (отрицательный знак).lookhaed).

Попробуйте здесь!

Надеюсь, это поможет!

...