Хотя это не ответ на ваш вопрос (как это сделать с помощью регулярных выражений), я хотел бы отметить, что эту задачу можно выполнить с гораздо большей производительностью при использовании простого 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;
(Если вы в порядке с помощью процедуры вместо функции вы можете сделать это на месте и сохранить память и увеличить скорость. Но, скорее всего, вам не нужны такие оптимизации.)