正则表达式\ b但不仅仅是c#中的字母数字字符

时间:2017-10-06 20:25:47

标签: c# regex

我想要与\b相同的功能,但需要其他字符。

在C#中,我想要像

这样的东西
string str = "\\b" + Regex.Escape(string) + "\\b");

但我有一些Regex.Escape("@(Something") 会在字符串Typing @(Something to you中找到它。

2 个答案:

答案 0 :(得分:1)

您遇到的问题与\b word boundary依赖于上下文的情况有关,而\b\(abc\b将与(abc中的x(abc)相匹配但不会与:(abc)中的\b\(相匹配(表示在var pattern = $@"(?<!\w){Regex.Escape(string)}(?!\w)"; )之前必须有一个单词char。

要匹配任何未使用字符括号的字符串,请使用

(?<!\w)

请参阅regex demo

在这里,(?!\w)是一个负面的lookbehind,它将确保当前位置左侧没有单词char,var pattern = $@"(?<!\S){Regex.Escape(string)}(?!\S)"; // Match when enclosed with whitespaces否定前瞻将确保没有单词char立即当前位置的权利。

其他自定义“字”边界:

  • 空白字边界:c
  • 字词和符号边界(如果您不想在c++中找到var pattern = $@"(?<![\w\p{S}]){Regex.Escape(string)}(?![\w\p{S}])";):SELECT cpa_0.[Period] as "Period", cpa_0.[Account] as "Account", cpa_0.[Center] as "Center", cpa_0.[Scenario] as "Scenario", cpa_0.[Effective_Date] as "Effective_Date" FROM [dbo].[GLDetail] cpa_0 WHERE cpa_0.[Center] = $$Centers-VALUE$$ and cpa_0.[Account] = $$Accounts-VALUE$$ and cpa_0.[Period] = case when $$View-VALUE$$ = 'Periodic' then $$Periods-VALUE$$ when $$View-VALUE$$ = 'Y_T_D' then ('2017-09','2017-08') end

答案 1 :(得分:0)

为此,您需要在每一端都有条件字边界 它只是保护字符串的开头和结尾,如果它是一个单词,它必须是
一个词边界。

如果它不是一个单词,则默认为什么都没有,因为它应该是。

new FlurlClient(url).WithoutRedirects()...

所以,它最终看起来像

 (?(?= \w )
      \b 
 )
 (?: @\(Something )
 (?(?<= \w )
      \b 
 )

Regexstorm.net demo

这可以消除猜测。