I want to replace dashes with a full-stop (.). If the dash appears as a hyphen it should be ignored. E.g. -ac-ac
with .ac-ac
I started with the following regex: (?<!\s|\-)\- |\- (?!\s|\-)
CodePudding user response:
You can use
\B-|-\B
See the regex demo.
The pattern matches
\B-
- a hyphen that is preceded by a non-word char or is at the start of a string|
- or-\B
- a hyphen that is followed by a non-word char or is at the end of a string.
See the Python demo:
import re
text = "-ac-ac"
print( re.sub(r'\B-|-\B', '.', text) )
# => .ac-ac
If you want to only narrow this down to letter context, replace \B
with negative lookarounds containing a letter pattern:
(?<![^\W\d_])-|-(?![^\W\d_])
See this regex and Python demo.