Outra possibilidade que funcionaria para encontrar qualquer ocorrência (primeira, segunda, terceira, etc) é simplesmente cortar do texto original as várias strings antes-localizadas a partir da posição encontrada em cada chamada e depois repetir a busca desejada. Isso pode ser feito em um loop.
Por exemplo, para encontrar a terceira ocorrência você poderia fazer assim:
Code: Select all
str := "<RazaoSocial>Fulano</RazaoSocial><RazaoSocial>Siclano</RazaoSocial><RazaoSocial>Beltrano</RazaoSocial>"
Loop 3
{
Posicao := RegExMatch(str, "<RazaoSocial>\K(.*?)(?=<\/RazaoSocial>)", m) ; No RegEx (?=<\/RazaoSocial>) é uma asserção look-ahead que significa que deve existir <\/RazaoSocial> após o padrão, mas que isso não deve vir na resposta.
Remover := Posicao + 5 ; Removemos todos os caracteres até a última posição encontrada E TAMBÉM alguns após ela (5 é só um exemplo), justamente para que a próxima busca não encontre o mesmo padrão. Tome apenas o cuidado de nunca remover mais caracteres do que a string que deve ser localizada possui (pois correria o risco de cortar parte da próxima ocorrência).
StringTrimLeft, str, str, %Posicao%
; msgbox % str ; Descomente esta linha caso queira ver o trabalho de corte no texto após cada passo do loop.
}
msgbox % m
Veja que se você mudar o número do loop acima para 1, vai encontrar a primeira ocorrência (Fulano) e se mudar para 2, vai encontrar a segunda (Ciclano).
Perceba também que se você quiser manter o texto original após isolar a informação também será muito fácil: basta realizar uma cópia dele no início em outra variável e trabalhar os cortes/regEx apenas na variável-cópia.