我现在有一个字符串str="发表于:2013-06-04",我想取出这里面的时间。
str1="-".join(list(filter(str.isdigit,str)))
但是这样写有错误:TypeError: isdigit() takes no arguments (1 given)
不知道为什么出错?
或者有没有什么别的方法?
谢谢你,我按照你的例子写的,还是有错误: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)
我想把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']