我想在格式18-05-2018 和中 查找日期18-05-18,但不是 2018-05-18。我想使用正则表达式,以便True在字符串中出现这样的日期时得到。所以它应该返回True这些字符串:ggggg18-05-2018gggggggggg18-05-2018ggggg12345678ggggg18-05-18gggggggggg18-05-18ggggg12345678但它应该返回False这些字符串:ggggg2018-05-18gggggggggg2018-05-18ggggg12345678怎么做?我找到了findall()方法和模式,'\d{1,2}[-]\d{1,2}[-]\d{2,4}'但它返回True了最后两个字符串,正如它18-05-18在其中找到的那样。
3 回答
肥皂起泡泡
TA贡献1829条经验 获得超6个赞
使用负向后视和前视:
import re
s = 'sasdassdsadasdadas18-05-2018sdaq1213211214142'
print(re.findall(r'(?<!\d)\d{1,2}[-]\d{1,2}[-]\d{2,4}(?!\d)', s))
# ['18-05-2018']
这可确保在所需内容的开头或结尾没有尾随数字。
为了证明它处理您的错误情况:
import re
s = 'sasdassdsadasdadas2018-05-2018sdaq1213211214142'
print(re.findall(r'(?<!\d)\d{1,2}[-]\d{1,2}[-]\d{2,4}(?!\d)', s))
# []
阿晨1998
TA贡献2037条经验 获得超6个赞
一种方法是检查日期匹配开始之前的内容是否是输入开头的非数字,日期匹配之后的内容也是非数字或输入的结尾。
text = "sasdassdsadasdadas18-05-2018sdaq1213211214142"
matches = re.findall(r'(?:\D|^)(\d{1,2}[-]\d{1,2}[-]\d{2,4})(?:\D|$)', text)
print matches
['18-05-2018']
添加回答
举报
0/150
提交
取消