Разрыв строки после каждого алфавита в строке - PullRequest
1 голос
/ 23 апреля 2019

У меня есть строка в (горизонтальной) форме 184.b189.a194.b199.d204.d209.b214.b219.d, которую мне нужно преобразовать в (вертикальной) форме

184.b
189.a
194.b
199.d
.......

Я пытался Regex найти каждый алфавит, используя приведенное ниже регулярное выражениевыражение , чтобы я мог добавить разрыв строки <br /> после каждого алфавита в строке.Выражение работает отлично, я не мог понять, как добавить перевод строки

 var count = Regex.Matches(text, @"[a-zA-Z]");

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Вы можете использовать регулярное выражение (\d{3}\.[A-Za-z]) https://regex101.com/r/Z05cC4/1,

, что:

\d{3} matches a digit (equal to [0-9])
{3} Quantifier — Matches exactly 3 times
\. matches the character . literally (case sensitive)
Match a single character present in the list below [A-Za-z]
A-Z a single character in the range between A (index 65) and Z (index 90) (case sensitive)
a-z a single character in the range between a (index 97) and z (index 122) (case sensitive)

Тогда возьмите только первую группу.


public static class Program
{
    private static void Main(string[] args)
    {
        string input = @"184.b189.a194.b199.d204.d209.b214.b219.d";
        IEnumerable<string> capturedGroups = ExtractNumbers(input);

        string res = string.Join(Environment.NewLine, capturedGroups);
        Console.WriteLine(res);
    }

    static IEnumerable<string> ExtractNumbers(string Input)
    {
        string pattern = @"(\d{3}\.[A-Za-z])";
        MatchCollection matches = Regex.Matches(Input, pattern, RegexOptions.Singleline);

        foreach (Match match in matches)
            yield return match.Groups[1].Value;
    }
}

Выведение:

184.b
189.a
194.b
199.d
204.d
209.b
214.b
219.d
0 голосов
/ 23 апреля 2019

Вы можете попробовать Regex.Replace : мы заменяем каждый A..Za..z совпадем с собой $0, за которым следует новая строка

  string source = "184.b189.a194.b199.d204.d209.b214.b219.d";

  string result = Regex.Replace(source, "[A-Za-z]", $"$0{Environment.NewLine}");

  Console.Write(result); 

Результат:

184.b
189.a
194.b
199.d
204.d
209.b
214.b
219.d

Та же идея, если вы хотите добавить <br />

  string result = Regex.Replace(source, "[A-Za-z]", $"$0<br />");

Linq является альтернативой:

  string result = string.Concat(source
    .Select(c => c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z' 
                   ? c.ToString() + "<br />" 
                   : c.ToString()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...