.* means any number (including zero) of any character (except line feeds).
* simply means any number (including zero) of the previous character which, in your example, the preceding character was a capital "C".
So "ABC*" means "AB" or "ABC" or "ABCC" or "ABCCCCCCCCCCCCC" etc.
"ABC.*" means "ABC" or "ABC2" or "ABCA" or "ABCB" or "ABCZZZZZZZZ" or "ABCalkjhdfjhaajfADADFERHKULdjhq984357ajsdf237845a jhd7y54".
Now, I would expect that if you have two objects (WebEdits or otherwise) named "ABC" and "ABC2" that searching for "ABC.*" will find both of them, in which case they are not unique. QTP won't know which object you mean if you describe a regular expression that matches two or more objects.
Further, I would expect that "ABC*" will find the one named "ABC" but will not find the one named "ABC2" because that won't match the regular expression.
I am not sure why you want a regular expression that matches both objects.
will match both, but since it finds both objects, it won't be unique and won't know which object to interact with.
The only way this works is if only one of the two objects exists at the same time.
For example, when Mary logs in, only the "ABC" WebEdit is available, but when Tom logs in, only the "ABC2" WebEdit is available. If you want to say "Hello World" in the object, regardless of who logged in, then ("id:=ABC.*") should work for you.
But if both objects are present on the screen at the same time, you need to describe them uniquely. Which means you won't use a regular expression because the whole purpose of REs is to use wildcards to cover multiple or variable values.