Обмен символов с использованием TRegEx в Delphi - PullRequest
1 голос
/ 19 февраля 2020

Мне нужно поменять точку символа с запятой и наоборот одновременно.

function TformMain.SwapString(input, fromSymbol, toSymbol: String): String;
begin
  Result := AnsiReplaceStr(input, fromSymbol, '_');  //100,200_00
  Result := AnsiReplaceStr(Result, toSymbol, fromSymbol); //100.200_00
  Result := AnsiReplaceStr(Result, '_', toSymbol); //100.200,00
end;

Как это сделать с помощью TRegEx в Delphi Rio?

1 Ответ

5 голосов
/ 19 февраля 2020

Хотя это не ответ на ваш вопрос (как это сделать с помощью регулярных выражений), я хотел бы отметить, что эту задачу можно выполнить с гораздо большей производительностью при использовании простого l oop:

function SwapPeriodComma(const S: string): string;
var
  i: Integer;
begin
  Result := S;
  for i := 1 to S.Length do
    case S[i] of
      '.':
        Result[i] := ',';
      ',':
        Result[i] := '.';
    end;
end;

Это намного быстрее, чем подход AnsiReplaceStr и метод регулярных выражений.

Обобщается на любые два символа:

function SwapChars(const S: string; C1, C2: Char): string;
var
  i: Integer;
begin
  Result := S;
  for i := 1 to S.Length do
    if S[i] = C1 then
      Result[i] := C2
    else if S[i] = C2 then
      Result[i] := C1;
end;

(Если вы в порядке с помощью процедуры вместо функции вы можете сделать это на месте и сохранить память и увеличить скорость. Но, скорее всего, вам не нужны такие оптимизации.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...