Как удалить пробелы между конкретными символами в строке? - PullRequest
3 голосов
/ 24 января 2011

Итак, у меня есть такая строка:

string sampleString = "this - is a string   - with hyphens  -     in it";

Здесь следует отметить, что слева и справа от дефисов есть случайное количество пробелов.Цель состоит в том, чтобы заменить пробел в моей строке С дефисом (отсюда и проблема с переносами в строке).Поэтому результат, который мне нужен, должен выглядеть следующим образом:

"this-is-a-string-with-дефис-в-нем".

В настоящее время я использую:

sampleString.Trim().ToLower().Replace(" ", "-")

но это приводит к следующему выводу:

"this --- is-a-string ------ with-дефисы -------- in-it "

Ищите самое чистое и лаконичное решение этой проблемы.

Спасибо!

Ответы [ 8 ]

9 голосов
/ 24 января 2011

Поскольку каждый будет предлагать решение регулярных выражений, я представляю вам решение без регулярных выражений:

string s = "this - is a string   - with hyphens  -     in it";
string[] groups = s.Split(
                       new[] { '-', ' ' },
                       StringSplitOptions.RemoveEmptyEntries
                  );
string t = String.Join("-", groups);        
6 голосов
/ 24 января 2011

Попробуйте использовать System.Text.RegularExpressions.Regex.

Просто позвоните:

Regex.Replace(sampleString, @"\s+-?\s*", "-");
1 голос
/ 24 января 2011

Это похоже на работу для регулярных выражений (или токенизации, если вы предпочитаете это).

Используя регулярное выражение, вы можете убрать все пробелы и дефисы и заменить его одним дефисом. Это выражение соответствует любому количеству пробелов и дефисов:

[- ]+

В качестве альтернативы вы можете разбить строку на токены по пробелам, а затем рекомбинировать строку с дефисами между токенами , если сам токен не является дефисом. Псевдокод:

tokens = split(string," ")
for each token in tokens,
  if token = "-", skip it
  otherwise print "-" and the token
0 голосов
/ 24 января 2011

Regexes ваш друг здесь.Вы можете создать шаблон, в котором все последовательные пробелы / дефисы совпадают.

  var hyphenizerRegex = new Regex(@"(?:\-|\s)+");
  var result = hyphenizerRegex.Replace("a - b c -d-e", "-");
0 голосов
/ 24 января 2011

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

var sampleString = "this - is a string   - with hyphens  -     in it";
var trim = Regex.Replace(sampleString, @"\s*-\s*", "-" );
0 голосов
/ 24 января 2011

Если вы хотите, чтобы все слова И существующие переносы были использованы, тогда другим подходом было бы разделить строку на массив, разбивающий пробелы.Затем восстановите строку, игнорируя все пробелы, и вставляя дефисы.

0 голосов
/ 24 января 2011

Попробуйте это:

private static readonly Regex rxInternaWhitespace = new Regex( @"\s+" ) ;
private static readonly Regex rxLeadingTrailingWhitespace = new Regex(@"(^\s+|\s+$)") ;
public static string Hyphenate( this string s )
{
  s = rxInternalWhitespace.Replace( s , "-" ) ;
  s = rxLeadingTrailingWhitespace.Replace( s , "" ) ;
  return s ;
}
0 голосов
/ 24 января 2011

В одной строке вы можете сделать это

Regex.Replace(sampleString, @"\s+", " ").Replace (" ", "-");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...