RegEx搜索以特殊符号结尾或开头的整个单词

时间:2017-12-15 20:15:32

标签: c# regex web-services

我正在尝试在包含#的文件中进行搜索,并尝试了以下两个RegEx语句,但都没有工作。有人可以向我显示正确的RegEx,我可以搜索常规的字母数字字符,以及用户是否包含#或其他特殊字符?

使用NLog,我可以看到该字符串已正确发送到Web服务。然后我构建了以下RegEx(尝试了两种不同的方式)。

\b(?:C#)\b
\b(?:C\#)\b

以下是我文件中的部分字符串,其中包含我正在搜索的字符串:

by multiple customers C# both external and internal

C#代码:

var reader = File.ReadAllText(currentFile);

var pattern = @"\b(?:" + searchPhrases[0] + @")\b"; \\ I've tried escaping it also.

// Works for a word like this ("White Paper" or "Paper" but not for "C# White Paper")
if (Regex.IsMatch(reader, pattern, RegexOptions.IgnoreCase))
{
    searchResults.AppendLine(currentFile);

    searchResults.Append("|");
}

Ajax:

$.ajax({
    url: "searchservice.asmx/SearchFiles",
    data: { searchParameters: parameters, searchOnCompletePhrase: completePhrase },
    type: "GET",
    dataType: "text",
    contentType: "text/plain; charset=utf-8",
    success: function (data) {
        processSearchData(data);
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        lookupErrorDefinition(this);

        console.log(XMLHttpRequest.status);
    }
});

1 个答案:

答案 0 :(得分:0)

您可以使用以下两种解决方案之一:

 var pattern = @"(?<!\w)(?:" + Regex.Escape(searchPhrases[0]) + @")(?!\w)";

或者

var pattern = @"(?<!\S)(?:" + Regex.Escape(searchPhrases[0]) + @")(?!\S)";

在第一个解决方案中,(?<!\w)匹配一个前面没有单词char的位置,(?!\w)匹配一个没有单词char的位置。

在第二个解决方案中,(?<!\S)匹配一个前面没有非空白字符的位置(即前面有空格或字符串的开头),而(?!\S)匹配的位置不是后跟一个非空白字符(即后跟一个空格字符或字符串结尾)。