The fine print on (most, all?) Amex Offers states the transaction has to post by the expiration date. They say this is how they know the transaction was actually made, which they claim they can't tell from a pending charge. I remember seeing somewhere that charges typically post within 72 hours, but in my experience, yes, weekends can make that processing time longer. Amex says it's because the merchant has to send info of the transaction to them for the charge to post.
All that said, I have gotten Amex to give me the credit when I used an Offer prior to the expiration date (received the Great news! email and all) but the charge didn't post until after the expiration date. Sometimes when the charge finally does post it'll show a date prior to the expiration of the Offer, then making your case is easy. If the transaction posts with a date after the expiration date, then be prepared to make your case with receipts, order confirmations, Amex email etc. that show you used the Offer before it expired.
I've disputed two Offer statement credits recently, both via Chat. Both times, I used the Offers before they expired but the charges posted after the expiration date (one took 5 days to post!). When the statement credits didn't automatically post after 7-10 days, I reached out via Chat that I was "concerned" that my Amex Offers hadn't credited. The CSRs might tell you it can take up to 90 days for the statement credit to appear, but even they admit it never takes that long. One CSR read the fine print to me that the charge has to post before the expiration date. So I asked if the credit was not appearing because it appeared the charges posted after the expiration date even though I used the Offers before they expired. I gave them the dates of the transactions, said it's completely out of my control when the merchant transmits its info to Amex, did my part to use the Offers on time, laid it on heavy that I've been a longtime customer and I expected Amex to make this right and honor the Offer. It took some time and follow up, and the Chat CSRs had to escalate the issue, but I eventually got the credits.