Метод 1
Возможно,
([^\s:_]+)_(\S+)
может работать нормально.
Метод 2
С помощью lookbehind для создания левой границы для строки подчеркивания:
(?<=:)([^_]+)_(.+)
Test
import re
string = '''
abc.def.ghi:wxyz_1234
abc.def.ghi:abcd_78910
abc.def.ghi: foo_baz123
'''
expression = r'([^\s:_]+)_(\S+)'
for i in re.findall(expression, string):
print(i[0])
print(i[1])
Вывод
wxyz
1234
abcd
78910
foo
baz123
Если вы хотите упростить / изменить / изучить выражение, это было объяснено на верхней правой панели regex101.com . При желании вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами входных данных.
RegEx Circuit
jex.im визуализирует регулярные выражения: