Строка регулярных выражений (удаление символа и замена его пробелом) - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть следующее в расширении помощника :

return Regex.Replace(str,
"(?<=[a-z])(?<x>[A-Z])|(?<=.)(?<x>[A-Z])(?=[a-z])|(?<=[^0-9])(?<x>[0-9])(?=.)",
 " $1");

, которое будет эффективно принимать

WhwhatIPutInToIt

и рендеринг

Что бы я ни положил в него

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

Я подумал, что вместо этого попытался бы взять что-то вроде

Whever_I_put_into_it

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

Любая помощь?

Обновление: Извините, что не ясно.Это вспомогательное расширение для преобразования имеющихся у меня перечислений во что-то удобочитаемое.Я использую помощника для моих выпадающих списков и флажков.У меня есть более 10 перечислений для них, и делать каждый индивидуально было бы больно.Я надеялся, что смогу просто исправить код Regex.Replace в верхней части, чтобы выполнить то, что мне нужно.

Имейте в виду, если я сделаю

YouHave9OrMore

вышеперечисленное Regex.Replace выплюнет (оно разделит число "9")

У вас есть 9 или больше

Спасибо всемдля быстрых комментариев.

Ответы [ 3 ]

2 голосов
/ 14 февраля 2012

Для этого вам не нужно регулярное выражение:

return str.Replace("_"," ");
0 голосов
/ 14 февраля 2012

Вы пытаетесь представить заголовки веб-страниц в URL-адресах, а затем преобразовать их обратно для отображения в удобочитаемой форме на самой странице?В этом случае вам следует использовать методы HttpUtility.UrlPathEncode и HttpUtility.UrlDecode.Они, соответственно, конвертируют "Whatever I Put In To It" в "Whatever%20I%20Put%20In%20To%20It" и обратно, с дополнительным преимуществом, которое учитывают и другие запрещенные символы (такие как < и >), и что большинство браузеров правильно отображают закодированные последовательности вадресная строка.

0 голосов
/ 14 февраля 2012

Вы пробовали свое регулярное выражение с параметром MatchEvaluator?

var finalstr = Regex.Replace(
  "WhateverIPutInToIt", 
  "(?<=[a-z])(?<x>[A-Z])|(?<=.)(?<x>[A-Z])(?=[a-z])|(?<=[^0-9])(?<x>[0-9])(?=.)", 
  me => " " + me.Value.ToLower() // <----
);

Это выдаст Whatever i put in to it.

OR

YouHave9OrMore ==> You have 9 or more


Если вы сделаете это методом расширения, вы можете использовать его следующим образом

var finalstr = System.IO.SearchOption.TopDirectoryOnly.GetString();

public static class MyExtensions
{
    public static string GetString(this Enum en)
    {
        return Regex.Replace(en.ToString(), "(?<=[a-z])(?<x>[A-Z])|(?<=.)(?<x>[A-Z])(?=[a-z])|(?<=[^0-9])(?<x>[0-9])(?=.)", me => " " + me.Value.ToLower());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...