如何避免在RegEx拆分结果中捕获组? - python

我正在尝试使用re匹配以'\ n'开头的模式,然后是可能的'real(r8)',然后是零个或多个空格,然后是单词'function',然后我想要在发生匹配的地方拆分字符串。所以对于这个字符串,

text = '''functional \n   function disdat \nkitkat function wakawak\nreal(r8) function noooooo \ndoit'''

我想要:

['functional ',
 ' disdat \nkitkat function wakawak',
 ' noooooo \ndoit']

然而,

regex = re.compile(r'''\n(real\(r8\))?\s*\bfunction\b''')

regex.split(text)

退货

['functional ',
 None,
 ' disdat \nkitkat function wakawak',
 'real(r8)',
 ' noooooo \ndoit']

split也返回比赛的组。我怎么要求不要呢?

python大神给出的解决方案

您可以使用非捕获组,例如

>>> regex = re.compile(r'\n(?:real\(r8\))?\s*\bfunction\b')
>>> regex.split(text)
['functional ', ' disdat \nkitkat function wakawak', ' noooooo \ndoit']

注意?:中的(?:real\(r8\))。引用Python documentation for (?:..)

非捕获版本的常规括号。匹配括号内的任何正则表达式,但是在执行匹配后或在模式中稍后引用后,无法检索到与该组匹配的子字符串。