用于匹配句子中的单词的正则表达式

时间:2017-03-22 11:04:32

标签: c# regex

我正在寻找一个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");

但问题是它与连字符分隔的单词匹配,就像在痛苦中一样,我正在寻找一个完整的单词。

感谢任何帮助,谢谢

1 个答案:

答案 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