正则表达式与空格匹配

时间:2012-02-01 16:52:39

标签: c# .net regex

我有一些我希望在C#中匹配和替换的文字

文本将是这样的,并且可以在字符串中多次出现

  

这是一些内容!!这里的一些链接文本可以是任何东西:: / something / something / url.html !!在里面

我目前正在使用此正则表达式并替换但它无效。如果值中没有空格,它似乎只能起作用。

Regex r = new Regex("!!(?<first>\\S+)::(?<last>\\S+)!!");

content = r.Replace(content, delegate(Match match) { return ReturnCustomSpan(match.Groups[1].Value, match.Groups[2].Value); });

有人可以帮忙吗?我是一个正则表达式的菜鸟,我无法想出这个。

3 个答案:

答案 0 :(得分:4)

\ S是所有非空白字符,因此您明确排除空格。如果要匹配任何字符,请使用。+而不是\ S +

答案 1 :(得分:2)

试试这个:

!!(?<first>.+?)::(?<last>.+?)!!

它使用非贪心量词(.+?),因此正则表达式将正确匹配字符串,如下所示:

This is some content with a !!Some link text here this can be anything::/something/something/url.html!! :: inside it!!

否则它将“吃掉”从!!的第一次出现到最后一次出现的所有事情,这可能不是你所期望的。

答案 2 :(得分:0)

\S是你的问题,但正如伊戈尔·科尔霍夫所提到的,你应该得到什么 与您的分隔符不同步的内容会有麻烦。

没有真正的保护标准。通过说, delimeters是!!::,它会让它在内容中存在 仅作为一个分隔符,而不是它的文本部分。

如果你说它只作为分界符存在,那么你必须使用
如上所述的非贪婪方式,否则你将超支。

如果你说它可以作为分隔符之外的文本存在,并且形式为 !! :: !!是完美的,然后只有一种方法可以解析它。

!!((?:(?!::|!!)[\s\S])*)::((?:(?!!!|::)[\s\S])*)!!

!!(?<first>(?:(?!::|!!)[\s\S])*)::(?<last>(?:(?!!!|::)[\s\S])*)!!

相关问题