我正在寻找一个C#正则表达式来匹配句子中的完整单词。
我的句子和模式如下所示。
string mySentence = "There is no gain in this world without pain";
string mypattern = string.Format(@"(?:(?<=^|\s)(?=\S)|(?<=\S|^)(?=\s)){0} (?:(?<=\S)(?=\s|$)|(?<=\s)(?=\S|$))", "pain");
MatchCollection matches = Regex.Matches(mySentence, mypattern);
我没有使用上述模式进行任何匹配。
但如果我使用这种模式,我会得到一个匹配。
string mypattern = string.Format(@"\b{0}\b", "patient");
但问题是它与连字符分隔的单词匹配,就像在痛苦中一样,我正在寻找一个完整的单词。
感谢任何帮助,谢谢
答案 0 :(得分:2)
场景#1 (字母前面/后面跟着连字符)
使用否定外观(?<!-)
(搜索词组前没有-
)和(?!-)
(搜索词组后面没有-
)和\b
:< / p>
var mypattern = string.Format(@"(?<!-)\b{0}\b(?!-)", Regex.Escape(search));
场景#2 (用空格括起来的字词)
我希望匹配一个单词,该单词可以在换行符或空格之后或之后。
你需要使用这样的外观:
var mypattern = string.Format(@"(?<!\S){0}(?!\S)", Regex.Escape(search));
(?<!\S)
环视(等于(?<=\s|^)
)需要搜索字前的空格或字符串开头。 (?!\S)
否定前瞻将在搜索词后面需要一个空格符号。
Regex.Escape
是一个预先警告步骤,以确保搜索词中的所有特殊字符都被视为文字字符。
注意:如果您的&#34;单词&#34;从不包含空格,你不需要正则表达式。使用
var search = "this";
var sentence = "There is no gain in this world without pain";
var isPresent = sentence.Split().Contains(search);
Console.Write(isPresent); // = > True