Remover uma expressão aleatória da string

Eu tenho uma string / coluna algo parecido com isto

String a = "000003023_AggregateStopLossLimit_W x3A 973911_2012-12-22.PDF";

Eu quero criar uma substring que não tenha a parte' x3A 973911' nisso.

O que significa que eu quero algo assim

000003023_AggregateStopLossLimit_W_2012-12-22.PDF

Existe uma lista de tais cadeias que terão valores diferentes, mas o formato será o mesmo. Eu quero que a parte da string seja removida, que vem depois do primeiro espaço e termina no próximo '_'.

Isso é o que eu já fiz, isso está funcionando bem, mas quero saber se existe uma maneira melhor de fazer isso.

String b = a.replaceAll(a.substring(a.indexOf(" "), a.indexOf("_",a.indexOf(" "))),"");

Seria ainda melhor se eu pudesse fazer isso no próprio banco de dados, que é oracle, em vez de java. Alguma idéia para obter esta string formatada da coluna diretamente usando select?

Mais um requisito, eu não quero exibir a extensão do arquivo.
Então nada depois do '. deve ser exibido, o que significa algo como isto'000003023_AggregateStopLossLimit_W_2012-12-22'
Eu tentei o seguinte usando a solução anterior da APC

 select regexp_replace ( your_string
                          , '([^[:space]]*) (.*)_(.*)....'
                          , '\1_\3') as new_string from your_table

Isso está funcionando bem por enquanto.
Isso deve remover os últimos 4 caracteres e correr o risco de não obter resultado adequado se a extensão for maior ou menor que 3 ou se a string não estiver truncada.
Estou procurando uma maneira mais estética de fazer isso.
Qualquer chance?

questionAnswers(7)

yourAnswerToTheQuestion