我想隔离字符串中的数字。这些将直接在/
我做了这个就足够了:
a = "test0/0"
print re.split("(\d)/(\d)", a)
这在输出中具有所需的数字,但为什么测试和空白条目都会添加到输出中?我该如何避免呢这是印刷的内容:
['test','0','0','']
答案 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]
。