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。如何转换为预期的输出?
答案 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']
如果您确实希望包含文字括号,请将其放在捕获括号内。
非捕获括号(?:...)
允许您分组而不捕获。我想这就是您要寻找的。 p>