下面給出了一個從 API 回傳的簡單字串陣列示例,我們沒有太多控制。
我正在尋找“ABC HG”。這是不完整的字串,因為如果您在陣列示例中看到,它應該是 ABC HGL 或“HG”之后的任何其他字符。這是一個 API,即使它是部分字串,它也會給我所有結果。但是,這個字串示例搜索應該被認為是不完整的字串,并且不應該給我任何結果。我如何通過 linq 或優雅的方式做到這一點?
string[] strings = {"This is not ABC HGL",
"I am going to ABC HGL",
"What is ABC HGT",
"Excellent ABC HGU"}
我只需要找到一個搜索字串,如果它是一個不完整的字串并且不會產生任何結果。
uj5u.com熱心網友回復:
您可以使用正則運算式來執行此操作
var inputStrings = new string[]
{
"asdfasdf ABD DGT world",
"asdfasdf ABD DGL world",
"asdfasdf ABD DG world",
"asdfasdf ABD DG",
"asdfasdf ABD DGL",
"asdfasdf ABD DGT"
};
var searchText = "ABD DG";
var regex = new Regex($@"{searchText}(?!\S)");
var matchingStrings = inputStrings.Where(x => regex.IsMatch(x));
// Returns "asdfasdf ABD DG world" and "asdfasdf ABD DG"
uj5u.com熱心網友回復:
我認為 Linq 不適合這個。我將采取的方法是檢查搜索字串是否存在,然后檢查搜索目標左右的字符是否為空格。所以是這樣的:
public bool IsMatch(string stringToCheck, string searchString);
int index = 0;
while( index < stringToCheck.Length){
index = stringToCheck.IndexOf(searchString, index);
if(index < 0) return false;
var indexBefore = index - 1;
var indexAfter = index searchString.Length ;
var hasWhitespaceBefore = indexBefore < 0 || !char.IsLetter(stringToCheck[indexBefore];
var hasWhitespaceAfter = indexAfter >= stringToCheck.Length || !char.IsLetter(stringToCheck[indexBefore];
if( hasWhitespaceBefore && hasWhitespaceAfter) return true;
index ;
}
請注意,代碼未經測驗。注意逐個錯誤!
uj5u.com熱心網友回復:
var searchStr = "ABC HG";
string[] strings =
{
"This is not ABC HGL",
"I am going to ABC HG.",
"What is ABC Hg",
"ABC HG is excellent ",
"I am ABC HGU in this world"
};
var results = strings.Where(x => x.StartsWith($"{searchStr} ") ||
x.Contains($" {searchStr} ") ||
x.Contains($".{searchStr} ") ||
x.Contains($" {searchStr}.") ||
x.EndsWith($" {searchStr}")).ToList();
foreach (var result in results)
Console.WriteLine(result);
輸出:
I am going to ABC HG.
ABC HG is excellent
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/511735.html
標籤:C#细绳林克asp.net 核心
