我正在尝试使用 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
也会返回匹配组。我该怎么问呢?
答案 0 :(得分:5)
您可以使用非捕获组,例如
>>> 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 (?:..)
常规括号的非捕获版本。匹配括号内的正则表达式,但执行匹配后无法检索组匹配的子字符串,或稍后在模式中引用。