python 怎么取出字符串中的数字子串?

我现在有一个字符串str="发表于:2013-06-04",我想取出这里面的时间。
str1="-".join(list(filter(str.isdigit,str)))

但是这样写有错误:TypeError: isdigit() takes no arguments (1 given)
不知道为什么出错?
或者有没有什么别的方法?

第1个回答  推荐于2016-05-29
没分..很简单 (python2.7)
s = "发表于:2013-06-04"
# 我猜你的方法是
filter(str.isalnum,s)
# result '20130604'追问

谢谢你,我按照你的例子写的,还是有错误:TypeError: isalnum() takes no arguments (1 given)

追答

和我这是一摸一样吗?

s = "发表于:2013-06-04" # 这个变量名一定不能是str

filter(str.isalnum,s) # 这个str.isalnum,一定要是str,后面是s

追问

果然是str的问题。求解释

追答

用下面这个吧

s = "发表于:2013-06-04"
filter(lambda x:x.isdigit(),s)

本回答被提问者采纳
第2个回答  推荐于2017-07-03
要提取时间的话,用正则表达式吧追问

我想把2013-06-04匹配出来,不知道正则怎么写啊

追答

考虑最简单的情况:

>>> import re
>>> s="发表于:2013-06-04"
>>> p=re.findall(r"\d\d\d\d-\d\d-\d\d",s)
>>> p
['2013-06-04']

追问

我有几点疑问:1.在匹配的括号里面,开头的字母r是什么意思,我看有的正则匹配里面也没有这个r的。2.如果排除这种简单匹配的情况,比如p=re.findall(r"(\d+)-(\d+)-(\d)+",s)这样稍微复杂一点的,结果就不对。不知道哪里出问题了

追答

r是表示原始字符串,避免对反斜杠的转义

应该用r"(\d+)-(\d+)-(\d+)",但是这样会产生分组捕获
>>> p=re.findall(r"(\d+)-(\d+)-(\d+)",s)
>>> p
[('2013', '06', '04')]

追问

(\d+)(-*)(\d+)(-*)(\d):结果分组捕获(“2013”,“-”,“06”,“-”,“04”)
\d+-*\d+-*\d:结果['2013-06-04']

本回答被网友采纳
第3个回答  2015-10-09
使用正则表达式,过滤
第4个回答  2017-06-28
我猜你是爬虫爬取到的吧,用分割比较方便,用split分割:,就可以了。
第5个回答  2017-07-03
#!/usr/bin/env python
# -*- coding: utf-8 -*-
str="发表于:2013-06-04"
import re
print re.search(r'\d{4}-\d{2}-\d{2}', str).group(0)

相似回答