2010-03-30 2 views
1

Я хочу, чтобы найти и выделить строку в строке, но я не хочу, чтобы удалить пространство.C# - Как найти строку внутри строки, даже если она охватывает пробелы?

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

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

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

Есть < цвет шрифта = 'red'> 12 mon </font> keys

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

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

+0

Как будет регулярное выражение вставлять пробел между «2» и «m»? Не может ли он также искать «1 2mon», 12m on »и« 12mo n »? –

ответ

1

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

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

+0

Но, возможно, вам нужен квантор '*' вместо '?' для учета нескольких пробелов. –

+0

@ Ханс - Возможно - непонятно из вопроса ... –

+1

Вот почему я сказал «может быть», но я должен был бы это упомянуть. –

0

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

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

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

+0

+1. Но почему вы не можете использовать этот метод вместо newString = originalString.Replace ("", ""); – Amsakanna

3

Используйте * указать, что пробелы являются необязательными и использовать 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

Я удалил свой ответ в поддержку этого, который был в основном тем же самым ответом. нет смысла дублировать ответы. –

0

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

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 
Смежные вопросы