import re
pattern = r"\bJane(?:'?s|\(s\))? car\b|\b(car)\b"
s = ("for example\n"
" the car is red - Match\n"
" here is Jane car is red -> None\n"
" here is Janes car is red -> None\n"
" here is Jane's car is red -> None\n\n"
"2. I also want to find the cases Jane is in the phrase\n"
" the car is red - None\n"
" here is Jane car is red - Match\n"
" here is Janes car is red - Match\n"
" here is Jane's car is red - Match\n\n"
"3. and where car is not preceding by Jane(s)\n"
" here Jane(s) car is red - None\n\n"
"4. and of course the opposite\n"
" here is Jane(s) car is red - Match")
result = [m for m in re.findall(pattern, s) if m]
print(result)
aW1wb3J0IHJlCgpwYXR0ZXJuID0gciJcYkphbmUoPzonP3N8XChzXCkpPyBjYXJcYnxcYihjYXIpXGIiCgpzID0gKCJmb3IgZXhhbXBsZVxuIgogICAgICAgICAgICAiICAgIHRoZSBjYXIgaXMgcmVkICAtIE1hdGNoXG4iCiAgICAgICAgICAgICIgICAgaGVyZSBpcyBKYW5lIGNhciBpcyByZWQgIC0+IE5vbmVcbiIKICAgICAgICAgICAgIiAgICBoZXJlIGlzIEphbmVzIGNhciBpcyByZWQgIC0+IE5vbmVcbiIKICAgICAgICAgICAgIiAgICBoZXJlIGlzIEphbmUncyBjYXIgaXMgcmVkICAtPiBOb25lXG5cbiIKICAgICAgICAgICAgIjIuIEkgYWxzbyB3YW50IHRvIGZpbmQgdGhlIGNhc2VzIEphbmUgaXMgaW4gdGhlIHBocmFzZVxuIgogICAgICAgICAgICAiICAgIHRoZSBjYXIgaXMgcmVkICAtIE5vbmVcbiIKICAgICAgICAgICAgIiAgICBoZXJlIGlzIEphbmUgY2FyIGlzIHJlZCAgLSBNYXRjaFxuIgogICAgICAgICAgICAiICAgIGhlcmUgaXMgSmFuZXMgY2FyIGlzIHJlZCAgLSBNYXRjaFxuIgogICAgICAgICAgICAiICAgIGhlcmUgaXMgSmFuZSdzIGNhciBpcyByZWQgIC0gTWF0Y2hcblxuIgogICAgICAgICAgICAiMy4gIGFuZCB3aGVyZSBjYXIgaXMgbm90IHByZWNlZGluZyBieSBKYW5lKHMpXG4iCiAgICAgICAgICAgICIgICAgaGVyZSBKYW5lKHMpIGNhciBpcyByZWQgIC0gTm9uZVxuXG4iCiAgICAgICAgICAgICI0LiBhbmQgb2YgY291cnNlIHRoZSBvcHBvc2l0ZVxuIgogICAgICAgICAgICAiICAgaGVyZSBpcyBKYW5lKHMpIGNhciBpcyByZWQgIC0gTWF0Y2giKQpyZXN1bHQgPSBbbSBmb3IgbSBpbiByZS5maW5kYWxsKHBhdHRlcm4sIHMpIGlmIG1dCnByaW50KHJlc3VsdCk=