在字符串中找到某个模式,为什么其他匹配?

时间:2014-03-12 15:28:26

标签: python regex

我想隔离字符串中的数字。这些将直接在/

之前和之后

我做了这个就足够了:

a = "test0/0"
print re.split("(\d)/(\d)", a) 

这在输出中具有所需的数字,但为什么测试和空白条目都会添加到输出中?我该如何避免呢这是印刷的内容:

['test','0','0','']

3 个答案:

答案 0 :(得分:3)

通常拆分“0/0”只会返回['test', ''],但由于你的正则表达式包含括号,结果也会返回捕获的元素。

  

按照模式的出现拆分字符串。如果在模式中使用捕获括号,则模式中所有组的文本也将作为结果列表的一部分返回。

如果您只想捕获数字而不是其他内容,请尝试re.search

import re
a = "test0/0"
print re.search("(\d)/(\d)", a).groups()

结果:

('0', '0')

答案 1 :(得分:1)

在您的输入a中,test左侧有0/0,右侧为空。这就是为什么你在分裂后得到一个空的原因。

答案 2 :(得分:1)

这是re.split的工作原理when you give it a capturing expression。 (捕获表达式是包含捕获匹配的某个部分的括号的表达式。)它执行拆分,但它也返回捕获的值。您只需要捕获的值;然而。鉴于您提供的具体输入,您可以这样做:

re.findall('\d', 'test0/0')

但是如果您的输入更复杂,您可能希望将其缩小到括号内的数字。

[d for d in s.split('/') for s in re.findall('\d/\d', a_string)]

在后一种情况下,即使a_string为'100人,如8 test0 / 0',结果仍为[0,0]