ASP.NET Regex.Replace表达式和方法替换所有封闭的。人物

时间:2016-02-02 21:53:10

标签: asp.net regex vb.net

我有这个字符串:

The.Soundcraft.Si.Performer.1.is.digital.19.3.inch.mix.actually this is. a test

在这个字符串中,我想用.替换.字符前后的字符The. Soundcraft. Si. Performer. 1.is. digital. 19.3. inch. mix. actually this is. a test(所以尾随空格)除非前导或尾随字符是数字或空格。< / p>

最终结果将是:

([^0-9 ])\.([^0-9 ])

我在这里测试了我的正则表达式dim description as String = "The.Soundcraft.Si.Performer.1.is.digital.19.3.inch.mix.actually this is. a test" description = Regex.Replace(description, "([^0-9 ])\.([^0-9 ])", ". ") http://www.regexr.com/它似乎与我需要替换的所有部分相匹配。

所以我编码了这个:

 //app.UseFacebookAuthentication(
        //   appId: "",
        //   appSecret: "");

但没有任何反应。我错过了什么?

1 个答案:

答案 0 :(得分:1)

您可以使用

description = Regex.Replace(description, "\b\.\b", ". ")

regex demo here

enter image description here

为什么会有效?

单词边界\b可以有4个含义,具体取决于上下文:

  • (?<!\w)\b +字母([\p{L}\p{N}_]
  • 等构造中
  • (?<!\W)\b +非字母([^\p{L}\p{N}_]
  • 等构造中
  • (?!\w)在类似字母的构造中([\p{L}\p{N}_])+ \b
  • (?!\W)在非字母字母([^\p{L}\p{N}_])+ \b的构造中。

在您的情况下,第2和第4个案例适用:.是非单词字符,因此\b\.\b(?<!\W)\.(?!\W)相同:匹配附带的点字符。

EDGE CASE

如果您不想替换.旁边的_,则需要从字边界排除_,这就是它的外观:< / p>

(?<![^\p{L}\p{N}])\.(?![^\p{L}\p{N}])

请参阅demo