Совпадение и захват каждого слова из списка И что между этими словами

1

Я пытаюсь захватить все слова в строке, находящейся внутри массива, и я также хочу записать каждое слово, которое не является (в основном разделение строки на слова, которые у меня есть, и на то, что у меня нет).

Для пояснения здесь приведен пример:

Входные данные :

string myString = "ID-NUMthatissomeboringstuffNAME"

string [] wordsList = новая строка [] {"ID", "NUM", "NAME"};

Желаемый выход фиксирует (по порядку):

(Я БЫ)

(-)

(NUM)

(Thatissomeboringstuff)

(ИМЯ)

Мое регулярное выражение:

string regex = String.Format("(({0})|.*)", String.Join("|", rules))

Конечно, это не сработает, когда я попытался заменить, это просто даст мне первое письмо.

Еще раз, моя первоначальная проблема уже решена (я просто хотел разобрать такую строку и поместить некоторое значение в зависимости от того, что я нашел в ней... Просто Replace достаточно: p), но ради полноты, Мне нравится все это решать.

Теги:

3 ответа

2
Лучший ответ

Это должно быть сделано ({0}|[^({0})]+). Вот распад Regexr.

Код

var input = "ID-NUMthatissomeboringstuffNAME";

string[] wordsList = new string[] { "ID", "NUM", "NAME" };
string regex = String.Format( "({0}|[^({0})]+)", String.Join( "|", wordsList ) );

foreach(var match in Regex.Matches( input, regex )
                          .OfType<Match>()
                          .Select( match => match.Captures[0].Value ) ){
    Console.WriteLine( match );
}
  • 0
    Простой, элегантный, хорошо выглядит для меня: p
0

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

@"(?<g0>[AZ]*)(?<g1>[^AZ]*)(?<g2>[AZ]*)(?<g3>[^AZ]*)(?<g4>[AZ]*)"

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

  • 0
    Ну, возможно, я не был понятен, заглавные слова - только примеры здесь. Они не могут быть прописными в конце.
0
indexOf(string)

дает вам позицию строки, и вы можете использовать

substring(indexStart, word length)

получить его

  • 2
    Я думаю, что он имел в виду использование Regex. По его словам, простая замена сделает работу
  • 0
    Это все, но все равно спасибо за вклад.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню