如何用C#正则表达式格式化字符串

Stephen深瞳 2016-09-26 04:16:33
需求:
将字符串:
:FOR ${var} in range 10
(大空格为固定4个空格符,其余为1个空格符)
格式化成:
for var in range(10)

如何实现呢?原字符串不分大小写。
...全文
345 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
第二,第五个替换总的有规则吧,否则的话随便怎么写都能转成你要的
string text = @":FOR    ${var}    in range    10";
var tmp = Regex.Matches(text, @"\b\w+\b").Cast<Match>().Select((s, i) =>
{
    if (i == 4)
        return string.Format("({0})", s.Value);
    return s.Value;
});
Console.WriteLine(string.Join(" ",tmp));
xuzuning 2016-10-13
  • 打赏
  • 举报
回复
            var str = "FOR    ${var}    in range    10";
            var r = Regex.Replace(Regex.Replace(str.ToLower(), @"\W+", " "), @"\d+", "{$0}");
            Console.WriteLine(r);
q107770540 2016-10-13
  • 打赏
  • 举报
回复
void Main()
{
	string str="FOR    ${var}    in range    10";
	str=Regex.Replace(str,@"(\w+)\s{4}\$\{(\w+)\}\s{4}(\w+)\s(\w+)\s{4}(\w+)","$1 $2 $3 $4 ($5)");
	Console.WriteLine(str.ToLower());
	//for var in range (10)
}
风叔 2016-10-13
  • 打赏
  • 举报
回复
最简方法: MatchCollection mcs=Regex.Matchs(@"\w+"); string value=""; foreach(Match m in mcs)value+=m.Value+" "; string num=Regex.Match(@"\d+").Value; value=value.Trim()+"("+num+")";
风叔 2016-10-13
  • 打赏
  • 举报
回复
如果仅数字不同,直接提取数字,\d+ 如果关键字也不同先用正则表达式提取关键字,然后再合成比如::FOR==(?<=:)\w+ ${var}==(?<\$\{)'w+ in==(?<=\}\s+)\w+ range==(?<=\}\s+\w+\s{1})\w+ 数字==\d+

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧