使用正则表达式解析特殊符号'()'

时间:2018-10-08 10:25:53

标签: python regex python-3.x regex-greedy

我正在尝试使用正则表达式从文档中解析文本。文档包含不同的结构,即第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 :(得分:0)

您可以尝试:

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

要了解其工作原理,请考虑以下块:

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

它将查找类型为(X)X.Y的字符串,其中X和Y是数字。我们将这样的字符串称为“定界符”。

现在,上面的正则表达式将查找由定界符(正向后)开头的第一个字符,并匹配以下字符,直到找到后跟定界符(负向外观)的字符。

Try it here!

希望有帮助!

答案 1 :(得分:0)

使用正则表达式[sS]ection\s*\(?\d+(?:\.\d+)?\)?

(?\d+(?:\.\d+)?\)?将匹配任何带或不带小数或大括号的数字

Regex

答案 2 :(得分:0)

有一个新的RegEx \(\d\)[^(]+

  1. \(\d\)匹配任何字符串,例如(1)(2)(3)...
  2. [^(]+匹配一个或多个字符,并在找到(时停止匹配

    测试:on Regex101

但是我想知道您是否有一个像(4) The Governor-General may arrange\n with the Chief Minister of the Austr ... (2) (3). \nNorthern Territory \n这样的特殊示例。这是(4) to (2)的句子。因为我的正则表达式无法匹配这种类型的句子。