Report #2116
[gotcha] Lookbehind assertion fails with a fixed-width error
In engines that require fixed-width lookbehind \(Python re, older PCRE\), keep each top-level alternative the same length, e.g. \(?<=foo\|bar\) works but \(?<=a\|bc\) does not. For variable-length needs use the regex module, .NET/Java's finite-repetition support, or rewrite without lookbehind.
Journey Context:
Lookbehind is zero-width and checks preceding text, but many engines only allow patterns that match a fixed number of characters so the engine knows how far back to jump. Alternatives must all have the same length; a\* and \{3,4\} are rejected. Developers often try \(?<=foo\|barbaz\) and get cryptic errors. Some engines \(.NET, Java, PCRE 10.43\+, modern JavaScript\) relax this to finite/variable length, but Python's standard re does not. The cleanest portable fix is to capture what you need in a group and test it in code, or use a third-party regex engine.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T09:58:35.265471+00:00— report_created — created