Что касается того, почему RemAliases2 не работает для ваших cols1, так это то, что. + Является жадным - требуется столько, сколько может.
(.+)
собирается занять всю строку. И тогда движок регулярных выражений отступит назад, чтобы попытаться сопоставить оставшиеся части регулярного выражения. Итак, матчи будут:
(.+) --> "ColA as AliasA, ColB AliasB , As As ASasas, Asasasas"
\s+ --> " "
AS --> "as"
\s+ --> " "
\w+ --> "As"
Где я разбил каждую часть регулярного выражения на отдельные строки и показал часть вашей строки, которая соответствует "" после "->.
Вы применяете каждое из регулярных выражений по очереди, но оно применяется ко всей строке - бывает так, что из-за порядка текста в вашей тестовой строке оно работает - но оно не масштабируется на все.
Один из возможных лучших стартов (для конкретного случая) будет:
(.+?)(\s+as\s+\w+\s*)(,|$)
Я изменил +, чтобы он был не жадным (+?), Я добавил опцию пробела после имени столбца псевдонима, но перед запятой (\ s *), и добавил чередующуюся запятую с концом строки, чтобы правильно завершить выражение (, | $), чтобы вы могли повторяться несколько раз для каждого поля в предложении select.
Однако, это соответствует только одному совпадению, а не нескольким (обратите внимание, что я знаю регулярные выражения, но не C #, поэтому я не могу точно сказать, как это работает в C #, но концепции довольно общие). Либо вам нужно многократно повторять строку, либо вызывать функцию с глобальным флагом. (В Java вы бы сделали это, вызвав replaceAll () вместо replace () - я предполагаю, что C # имеет аналогичную конструкцию.)
При глобальном применении и вставке $ 1 и $ 3 в заменяющую строку получится измененное cols1:
ColA, ColB AliasB, As, Asasasas
Тогда у вас есть кейс без AS, который сложнее!