Marco e Sérgio obrigado pelo retorno :)
Eu preciso de uma expressão genérica para aplicar exatamente na quantidade de espaço que eu preciso.
Eu tenho vários arquivos .xaml cada um com sua particularidade, cada intervalo de espaço eu preciso substituir pela Tag que vai aplicar esse espaço com o valor de "px" flexível como o Sérgio fez.
Eu preciso pegar grupo a grupo separado e fazer o replace, dinamicamente.
Segue abaixo dois exemplo.
Exemplo 01:
<p>| NOME FONE |</p>
<p>| XXXXXXX (XX)XXXX-XXXX |</p>
Exemplo 02:
<p>Mes faturamento faturamento</p>
<p>Janeiro 99999999999 99999999999</p>
Hoje esta assim a minha função em c#
public string SpaceInXaml(string xaml)
{
string patternTab = @"\t+";
int valorDoTab = 47;
// verifica primeiro os espaços com TAB
string xamlTratado = Space(patternTab, xaml, valorDoTab);
string patternEspaco = @"\s\s\s+";
int valorDoEspaco = 4;
// verifica segundo os espaços normais.
return Space(patternEspaco, xamlTratado, valorDoEspaco);
}
public string Space(string pattern, string xaml, int valueSpace)
{
var xamlLine = string.Empty;
var xamlFinal = string.Empty;
using (StringReader line = new StringReader(xaml))
{
xamlLine = line.ReadLine();
while ((xamlLine != string.Empty) && (xamlLine != null))
{
if (Regex.IsMatch(xamlLine, pattern))
{
MatchCollection matches = Regex.Matches(xamlLine, pattern);
//atribui a tag <Span ...> em na variavel.
var span = Regex.Match(xamlLine, @"Span\b[^>]*");
foreach (Match match in matches)
{
// valor do espaço
int spaceValue = match.Length * valueSpace;
// monta a tag <Span ...> para subistituir os espaços no meio da linha
string spanEntrePalavras = "</Span><" + span.Value + " Space=\"" + spaceValue.ToString() + "\">";
// monta a tab <Span ...> para subistituir os espaços de inicio.
string spanInicio = "\" Space=\"" + spaceValue.ToString() + "\">";
// verifica espaços pelo Regex no inicio
string patternIninio = "\">" + match.Value + @"(?=(\b|\S))";
xamlLine = Regex.Replace(xamlLine, patternIninio, spanInicio);
// verifica espaços pelo Regex entre palavras
string patternEntrePalavras = @"(?=(\b|\S))(" + match.Value + @")(?=(\b|\S))";
xamlLine = Regex.Replace(xamlLine, patternEntrePalavras, spanEntrePalavras);
}
}
xamlFinal += xamlLine + "\n";
xamlLine = line.ReadLine();
}
}
return xamlFinal;
}