Как сопоставить строку между <>? - PullRequest
2 голосов
/ 30 мая 2019

Я пытался \w+\:(\w+\-?\.?(\d+)?), но это не правильно

У меня следующий текст

<staticText:HelloWorld>_<xmlNode:Node.03>_<date:yyy-MM-dd>_<time:HH-mm-ss-fff>

The end result I want is something like the following

["staticText:HelloWorld", "xmlNode:Node.03","date:yyy-MM-dd","time:HH-mm-ss-fff"]

Ответы [ 4 ]

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

Ваш шаблон не соответствует 3-й и 4-й части данных примера, потому что в этой части \w+\-?\.?(\d+)? тире и цифры совпадают только один раз и не повторяются.

Для данных примера выможет использовать класс символов [\w.-]+ для сопоставления части после двоеточия, чтобы сделать сопоставление более широким:

<(\w+\:[\w.-]+)>

Regex demo | C # demo

Или, чтобы сделать его более конкретным, задайте шаблон либо для части Node.03, либо для части года, даты, часа и т. Д., Используя повторный шаблон.

<(\w+\:\w+(?:\.\d+|\d+(?:-\d+)+)?)>

Пояснение

  • < Матч <
  • ( Группа захвата
    • \w+\:\w+ Матч 1+символы слова, : и 1+ слова слова
    • (?: группа без захвата
      • \.\d+ совпадение . и цифры 1+
      • | или
      • \d+(?:-\d+)+ Совпадение цифр 1+ и повторение совпадений 1+ раз - и цифр 1+
    • )? Закрыть группу без захвата и сделать ее необязательной
  • ) Закрыть группу захвата
  • >

Regex demo | C # Демо

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

Эта строка должна соответствовать содержимому:

<(.*?)>

Он поймает стрелки в конце, который вам не нужен, но вы можете удалить их после слов без регулярных выражений.

Вы должны рассматривать веб-сайт как https://regexr.com - он помогает экспоненциально в написании регулярных выражений, позволяя вставлять свои дела и видеть, как он работает с ними.

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

Соответствует любой строке в <>.Надеюсь, это поможет.

<(. *?)>

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

Вы можете использовать следующее регулярное выражение.

<(.*?)>

Затем посмотрите, как работают группы для получения результата.

Regex rx = new Regex("<(.*?)>");
string text = "<staticText:HelloWorld>_<xmlNode:Node.03>_<date:yyy-MM-dd>_<time:HH-mm-ss-fff>";

MatchCollection matches = rx.Matches(text);
Console.WriteLine(matches.Count);

foreach(Match match in matches){
    var groups = match.Groups;
    Console.WriteLine(groups[1]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...