What is the difference between 对不起, 请问, 不好意思, and 抱歉 to express "excuse me" or "sorry"? I always wonder whether there is any difference between these four terms to say "excuse me" or "sorry". The difference between 对不起 and 不好意思 is explained in this question, but I'm not sure about the differences when you add more similar words into the mix.

The situation I want to ask about is:


Saying "Excuse me" to ask a person on the street for a direction or call a waiter in cafe.
Saying "Sorry" when I want to apologize for something that I made a mistake on.


In these use cases, what is the main difference of these words? I know 请问 doesn't have the "sorry" meaning, though...
对不起 is the phrase for apologizing for anything, for generally saying sorry. This is what you would normally say in situation 2.

请问 means "may I ask...?"; it is used to introduce a question and not to apologize for anything. You can use this when asking for direction (situation 1). But note: because of what it means, it must be followed by a question (otherwise it sounds incomplete). Therefore you would not use it just to attract a waiter's attention – although once you have his attention you can use it to ask whether they have anything you particularly want.

不好意思 indicates that the speaker is humbly embarrassed about something; it is used e.g. to politely refuse a gift. Basically it's used when the speaker doesn't want to appear to be taking advantage of the other person's hospitality or goodwill.

抱歉 is less common than the others; it is like 对不起 but more formal.