I need a regular expression to use in python that captures one group containing the whole string minus the last 2 characters, but if the string have a "-" , then ignore it and all after it.
Ex:
abcde = abc
jklmno-pqrs = jklm
I think it would be a mix between (.*)..$ and ^([^-]*) , but I dont know how to combine them.
CodePudding user response:
You could use a capture group matching any char except - followed by matching 2 chars other than -
^([^-\n] )[^-\n]{2}(?:-.*)?$
In parts, the pattern matches:
^Start of string([^-\n] )Capture group 1, match 1 or more chars other than-(add\nto not match a newline)[^-\n]{2}Match 2 chars other than-(?:-.*)?Optionally match-followed by 0 times any char$End of string
For example
import re
pattern = r"^([^-\n] )[^-\n]{2}(?:-.*)?$"
s = ("abcde\n""jklmno-pqrs")
print(re.findall(pattern, s, re.M))
Output
['abc', 'jklm']
CodePudding user response:
You can combine two regex using pipe delimiter like this
re.findall('(.*)..$|^([^-]*)', string)
for reference '|' pipe delimiter is used for grouping multiple regular expressions
