Я пытаюсь захватить все слова в строке, находящейся внутри массива, и я также хочу записать каждое слово, которое не является (в основном разделение строки на слова, которые у меня есть, и на то, что у меня нет).
Для пояснения здесь приведен пример:
Входные данные :
string myString = "ID-NUMthatissomeboringstuffNAME"
string [] wordsList = новая строка [] {"ID", "NUM", "NAME"};
Желаемый выход фиксирует (по порядку):
(Я БЫ)
(-)
(NUM)
(Thatissomeboringstuff)
(ИМЯ)
Мое регулярное выражение:
string regex = String.Format("(({0})|.*)", String.Join("|", rules))
Конечно, это не сработает, когда я попытался заменить, это просто даст мне первое письмо.
Еще раз, моя первоначальная проблема уже решена (я просто хотел разобрать такую строку и поместить некоторое значение в зависимости от того, что я нашел в ней... Просто Replace
достаточно: p), но ради полноты, Мне нравится все это решать.
Это должно быть сделано ({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 );
}
Я не уверен, что это более читаемо, но вы можете использовать это регулярное выражение:
@"(?<g0>[AZ]*)(?<g1>[^AZ]*)(?<g2>[AZ]*)(?<g3>[^AZ]*)(?<g4>[AZ]*)"
Он делает то, что вы находите, находит группы заглавных букв, затем прописные буквы и т.д. И сохраняет их в именованных группах.
indexOf(string)
дает вам позицию строки, и вы можете использовать
substring(indexStart, word length)
получить его