Как заменить ведущие пробелы, но сохранить несколько строк? - PullRequest
2 голосов
/ 31 мая 2019

Я пытаюсь написать регулярное выражение, которое удаляет все начальные пробелы, как это:

enter image description here

Следующий код делает это, но также жадно удаляет несколько строк, например:

enter image description here

Как я могу изменить регулярное выражение, чтобы оно удаляло предшествующие пробелы из каждой строки, но оставляло несколько строк без изменений?

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

namespace test_regex_double_line
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> resources = new List<string>();

            resources.Add("Jim Smith\n\t123 Main St.\n\t\tWherever, ST 99999\n\nFirst line of information.\n\nSecond line of information.");

            foreach (var resource in resources)
            {
                var fixedResource = Regex.Replace(resource, @"^\s+", m => "", RegexOptions.Multiline);
                Console.WriteLine($"{resource}\n--------------\n{fixedResource}\n===========================");
            }
        }
    }
}

1 Ответ

2 голосов
/ 31 мая 2019

Давайте попробуем удалить все пробелы (\s) , но \n и \r, т.е. [\s-[\r\n]]+ шаблон

Код:

string resource = 
  "Jim Smith\n\t123 Main St.\n\t\tWherever, ST 99999\n\nFirst line of information.\n\nSecond line of information.";

string fixedResource = Regex.Replace(resource, @"^[\s-[\r\n]]+", "", RegexOptions.Multiline);

Console.Write(fixedResource);

Результат:

Jim Smith
123 Main St.
Wherever, ST 99999

First line of information.

Second line of information.

Редактировать: Если вы хотите обработать коллекцию (скажем, List<string>), разумно определить Regex вне цикла (Linq) и т. д. по соображениям эффективности (см. комментарий Panagiotis Kanavos):

List<string> resources = new List<string>() {
  "Jim Smith\n\t123 Main St.\n\t\tWherever, ST 99999\n\nFirst line of information.\n\nSecond line of information.",
};

Regex regex = new Regex(@"^[\s-[\r\n]]+", RegexOptions.Multiline);

List<string> fixedResources = resources
  .Select(resource => regex.Replace(resource, ""))
  .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...