正则表达式字符串(取出一个字符并用空格替换)

时间:2012-02-13 20:45:20

标签: c# regex asp.net-mvc-3

我在辅助扩展程序中有以下

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

哪个会有效地采取

  

WhateverIPutInToIt

并渲染

  

无论我投入什么

除了我不想把每个正确的词大写。但是,如果我没有大写,则不会使用空格进行渲染。

我以为我会尝试采取像

这样的东西
  

Whatever_I_put_into_it

渲染我想要的东西。我无法弄清楚如何使用正则表达式(如果它甚至可能)去掉“下划线”字符并用空格替换它。

任何帮助?

更新 对不起,不清楚。这是一个帮助扩展,用于将我拥有的枚举转换为可读的内容。我正在为我的下拉列表和复选框列表使用帮助器。我有超过10个枚举,并且每个人单独做一个会很痛苦。希望我能够将顶部的Regex.Replace代码修改为能够实现我目标的东西。

请注意,如果我这样做

  

YouHave9OrMore

以上Regex.Replace将吐出(它将数字“9”分开)

  

你有9个或更多

谢谢大家的快速评论。

3 个答案:

答案 0 :(得分:2)

你不应该需要正则表达式:

return str.Replace("_"," ");

答案 1 :(得分:0)

您是否使用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 ==&gt; 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());
    }
}

答案 2 :(得分:0)

您是否尝试在网址中表示网页标题,然后将其转换回来以便在网页上以清晰的形式呈现?在这种情况下,您应该使用HttpUtility.UrlPathEncodeHttpUtility.UrlDecode方法。这些会分别将"Whatever I Put In To It"转换为"Whatever%20I%20Put%20In%20To%20It"并返回,其他优点还包括其他不允许的字符(例如<>),并且浏览器会在地址栏中正确呈现编码序列。