我想在格式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
提交
取消