import re
demo_str = "descr: Copper Concentrate Mine"
re.findall(r"(.*?):\s+(.*?)", a, re.I)
输出:[('descr','')]
这个结果不是我所期望的。 我要的是“ [('descr','铜精矿')]”
答案 0 :(得分:3)
从捕获组中删除最后一个?
,使其变得贪婪(doc):
import re
demo_str = "descr: Copper Concentrate Mine"
print( re.findall(r"(.*?):\s+(.*)", demo_str, re.I) )
打印:
[('descr', 'Copper Concentrate Mine')]
答案 1 :(得分:1)
此表达式也可能起作用:
import re
regex = r"([^:]+):\s*(.+)"
test_str = "descr: Copper Concentrate Mine"
print(re.findall(regex, test_str))
[('descr', 'Copper Concentrate Mine')]
如果您想探索/简化/修改表达式,可以 在右上角的面板上进行了说明 regex101.com。如果您愿意, 也可以在this link中观看它的匹配方式 针对一些样本输入。
答案 2 :(得分:0)
第二个条目为空的原因是由于第二部分中的非贪婪点.*?
。它将尽可能匹配。
由于它是表达式的最后一部分,并且后面没有边界或锚点,因此空匹配将满足条件。
示例数据的另一种选择是对匹配:
的{{3}}使用0+空格字符。
\s*:\s*
或者仅匹配一个冒号和1个以上的空格字符:
:\s+
import re
demo_str = "descr: Copper Concentrate Mine"
print(re.split(r"\s*:\s*", demo_str))
结果
['descr', 'Copper Concentrate Mine']