我想要与\b
相同的功能,但需要其他字符。
在C#中,我想要像
这样的东西string str = "\\b" + Regex.Escape(string) + "\\b");
但我有一些Regex.Escape("@(Something")
会在字符串Typing @(Something to you
中找到它。
答案 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
)
这可以消除猜测。