如何在C#正则表达式中查找作为单词的缩写

如何在C#正则表达式中查找作为单词的缩写,c#,regex,string,C#,Regex,String,我得到了一个字符串列表,可以在字符串中找到完整的“单词”。通常,使用\b锚定适用于大多数情况,除非我试图将&character作为单词查找,或者因为\b在空格和&character之间不匹配,或者在句点和空格之后,缩写后面有一个点 例如,要查找这些字符串: & b&w bpi p. 我试着写一些东西,比如: \b((&)|(b&w)|(bpi)|(p\.))\b 在测试字符串中: my b&w and & and p. test. my b&

我得到了一个字符串列表,可以在字符串中找到完整的“单词”。通常,使用
\b
锚定适用于大多数情况,除非我试图将&character作为单词查找,或者因为
\b
在空格和&character之间不匹配,或者在句点和空格之后,缩写后面有一个点

例如,要查找这些字符串:

&
b&w
bpi
p.
我试着写一些东西,比如:

\b((&)|(b&w)|(bpi)|(p\.))\b
在测试字符串中:

my b&w and & and p. test.
my b&w and & and p. test.

我还尝试使用
\s
检查空白,但我不想捕获空白,我也无法找到不捕获空白的方法。我相信它还需要检查字符串的开头和结尾。

尝试在一个组中使用所有缩写,如:

(^|\s+)(&|b&w|bpi|p\.)(\s+|$)

不使用单词边界(\b),您可以使用(空格)或“^start”或“$end of line.”的环视断言。。像这样:

(?<=^|\s)([^\s]*)(?=\s|$)
匹配项:

"my", "b&w", "and", "&", "and", "p.", "test."

它看起来只匹配
b&w
,而不匹配
&
p.
。大概是因为
&
本身被认为是非空白字符。这也行不通,因为我在寻找“整词”。如果我将空格设置为可选的,那么最好不要包含
\s
。例如,这将匹配单词
Philip.
,而不仅仅是
p.
。我理解,请再次检查。这非常接近,让我找到了需要的地方。前面和后面的部分是我需要的。中间部分应该改为我原来的部分,这样我们只捕获我需要的特定字符串<代码>(?)?