Кажется, вы можете легко избежать регулярных выражений здесь:
def replace_em(text):
if 'founder' in text: # if text contains founder
return 'CEO'
elif text.isdigit() and len(text) == 9: # all digits and length = 9
return 'NUM'
else:
return text
print(replace_em("Some founder here")) # CEO
print(replace_em("123456789")) # NUM
print(replace_em("Some other text")) # Some other text
См. Демоверсию Python .
Если вы хотите поиграть с regex и re.sub
, вы можете попробовать использовать этот код, но учтите, что он менее эффективен:
import re
def replace_em(m):
return 'NUM' if m.group(1) else 'CEO'
regex = re.compile(r'(?s)^([0-9]{9})$|.*founder.*')
print(re.sub(regex, replace_em, "Some founder here"))
print(re.sub(regex, replace_em, "123456789"))
print(re.sub(regex, replace_em, "Some other text"))
Смотрите еще одну демонстрацию Python
Здесь (?s).*founder.*|^([0-9]{9})$
сопоставляет любую строку, содержащую founder
, с первой альтернативой (учтите, что (?s)
заставляет .
соответствовать любому символу, включая символы разрыва строки) и другой альтернативой, и захватывает в группу 1 - девятизначная строка. Второй аргумент - это метод обратного вызова, который заменяет совпадения на основе пользовательской логики (если сопоставляется группа 1, заменить на NUM
else, на CEO
).