我的常规句子有什么问题?

时间:2019-08-20 03:47:03

标签: python regex

import re

demo_str = "descr:          Copper Concentrate Mine"
re.findall(r"(.*?):\s+(.*?)", a, re.I)

输出:[('descr','')]

这个结果不是我所期望的。 我要的是“ [('descr','铜精矿')]”

3 个答案:

答案 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+

re.split | Regex demo

import re

demo_str = "descr:          Copper Concentrate Mine"
print(re.split(r"\s*:\s*", demo_str))

结果

['descr', 'Copper Concentrate Mine']