如何从regex.split()获得正确的输出?

时间:2020-01-31 12:31:14

标签: python regex

import re
number_with_both_parantheses = "(\(*([\d+\.]+)\))"

def process_numerals(text):

    k = re.split(number_with_both_parantheses, text)
    k = list(filter(None, k))

    for elem in k:
        print(elem)


INPUT = 'Statement 1 (1) Statement 2 (1.1) Statement 3'
expected_output = ['Statement 1', '(1)' , 'Statement 2', '(1.1)', 'Statement 3']


current_output = ['Statement 1', '(1)' , '1', 'Statement 2', '(1.1)', '1.1' , 'Statement 3']


我的输入是INPUT。当使用输入文本调用方法“ process_numerals”时,我得到了current_output。如何转换为预期的输出?

1 个答案:

答案 0 :(得分:2)

您的正则表达式似乎已关闭。您意识到\(*检查零个或多个左括号吗?

>>> import re
>>> INPUT = 'Statement 1 (1) Statement 2 (1.1) Statement 3'
>>> re.split('\((\d+(?:\.\d+)?)\)', INPUT)
['Statement 1 ', '1', ' Statement 2 ', '1.1', ' Statement 3']

如果您确实希望包含文字括号,请将其放在捕获括号内。

非捕获括号(?:...)允许您分组而不捕获。我想这就是您要寻找的。