使用字符串匹配精确的字符串.c#中的Contains()方法

本文关键字:字符串 Contains 中的 方法 字符 串匹配 | 更新日期: 2023-09-27 18:29:41

我有一个html内容。我正在使用HtmlAgilityPack分析内容。我需要替换属性
'align="middle"'与'align="center"',我使用功能

if(htmlDoc.DocumentNode.OuterHttml.Contains("align = "middle""))
htmlDoc.DocumentNode.OuterHttml.Replace("align = "middle","align = "center"")

但如果条件返回true,即使对于**valign = "middle"**

如果条件不是Contains(),我需要放什么?

使用字符串匹配精确的字符串.c#中的Contains()方法

是的,我正试图在html内容中找到匹配项。

然后使用HtmlAgilityPack。你的代码应该是这样的。

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(HtmlString);
var tds = doc.DocumentNode.SelectNodes("//td[@align='middle']");

或者像这样使用LINQ

var tds = doc.DocumentNode.Descendants("td")
                .Where(td => td.Attributes["align"].Value == "middle")
                .ToList();

您想要实现的目标并不明确。String.Contains检查给定字符串是否包含在另一个(可能更大)字符串中的,以及它是否是子字符串。

也许你想知道它们是否相同,然后使用Equals==:

bool same = string1 == string2;

或者你想知道它是否以给定的字符串开始,然后使用StartsWith:

bool startsWith = string1.StartsWith(string2);

或者您想忽略大小写(.NET区分大小写):

bool equalsIgnoreCase = string1.Equals(string2, StringComparison.CurrentCultureIgnoreCase);

StartsWith:相同

bool startsWithIgnoreCase = string1.StartsWith(string2, StringComparison.CurrentCultureIgnoreCase);

最后,不区分大小写包含使用IndexOf:的等价项

bool containsIgnoreCase = string1.IndexOf(string2, StringComparison.CurrentCultureIgnoreCase) >= 0;

如果您的字符串类似于"blablabla align='align=''"middle ''"blablabla",那么您可以执行:

Contains(" align = '"middle'" ") // spaces before and after

但是别人怎么说很难理解你到底想要什么。

您可以尝试以下操作:

string str = "valign = '"middle'"";
string search = "align = '"middle'"";
int ix;
while ((ix = str.IndexOf(search, ix)) != -1)
{
    if (ix == 0 || !char.IsLetterOrDigit(str[ix - 1]))
    {
        break;
    }
    ix++;
}
bool success = ix != -1;

这甚至适用于valign = "middle";align = "middle"

它检查匹配开始之前的字母是否为非IsLetterOrDigit(如果存在)。如果是,则返回breaks,否则返回搜索下一个字符中的匹配项。

如果您想从字符串列表中找到完全匹配的字符串

if ( keywords.Find(str => str == keyword) != null )