Esta abordagem pode ser usada para automatizar isso (a solução exemplar a seguir está em python, embora obviamente possa ser transferida para qualquer linguagem):
você pode remover o espaço em branco de antemão E salvar as posições dos caracteres que não são de espaço em branco para que possa usá-los posteriormente para descobrir as posições de limite da string correspondentes na string original, como a seguir:
def regex_search_ignore_space(regex, string):
no_spaces = ''
char_positions = []
for pos, char in enumerate(string):
if re.match(r'\S', char): # upper \S matches non-whitespace chars
no_spaces += char
char_positions.append(pos)
match = re.search(regex, no_spaces)
if not match:
return match
# match.start() and match.end() are indices of start and end
# of the found string in the spaceless string
# (as we have searched in it).
start = char_positions[match.start()] # in the original string
end = char_positions[match.end()] # in the original string
matched_string = string[start:end] # see
# the match WITH spaces is returned.
return matched_string
with_spaces = 'a li on and a cat'
print(regex_search_ignore_space('lion', with_spaces))
# prints 'li on'
Se você quiser ir mais longe, pode construir o objeto de correspondência e retorná-lo em vez disso, portanto, o uso deste auxiliar será mais útil.
E o desempenho desta função também pode ser otimizado, este exemplo é apenas para mostrar o caminho para uma solução.