Как найти строку в строке, даже если она распространяется через пробелы? - PullRequest
1 голос
/ 30 марта 2010

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

Так что, если моя оригинальная строка:

Есть 12 обезьян

Я хочу найти ' 12 mon ' и выделить символы, заканчивающиеся на:

Есть 12 мес клавиш

НО мне также нужен тот же результат, если я ищу ' 12mon ' (без пробела на этот раз)

Это действительно согнуло мой разум! Я уверен, что это можно сделать с помощью Regex.

Ответы [ 4 ]

3 голосов
/ 30 марта 2010

Используйте *, чтобы указать, что пробелы необязательны, и используйте Replace метод Regex, класс:

var input = "There are 12 monkeys";

var result = Regex.Replace(input, @"12\s*mon", @"<font color='red'>$0</font>");

И результат:

There are <font color='red'>12 mon</font>keys
1 голос
/ 30 марта 2010

Вы можете регулярное выражение для 1 \ s? 2 \ s? M \ s? O \ s? N \ s?

Вам нужно написать функцию для генерации регулярного выражения, но это не должно быть слишком сложно. Обратите внимание, что я не использовал фактическое пространство при создании регулярного выражения ...

0 голосов
/ 07 апреля 2010

Ответ Константина не учитывает, находится ли место где-то еще. Поэтому вместо этого я бы взял ввод, который пользователь хочет найти, и вставил «\ w *» в каждую позицию, чтобы таким образом можно было найти любой возможный поиск.

var searchTerm = "eare1";
var input = "There are 12 monkeys";
var result = Regex.Replace(input, @"e\s*a\s*r\s*e\s*1", @"<font color='red'>$0</font>");

И результат:

Ther<font color='red'>e are 1</font>2 monkeys
0 голосов
/ 30 марта 2010

Это достаточно быстро, это намного аккуратнее: просто ищите как исходную строку, так и эту:

originalString.ToCharArray().Where(c => !Char.IsWhiteSpace(c));

Я полагаю, что большая часть времени обработки будет потрачена на перестройку вашей HTML-строки в любом случае, поэтому стоимость анализа массива char не должна быть серьезной проблемой.

...