c# - 如何从忽略字符串空格的列表中检索字符串元素?

Posted

技术标签:

【中文标题】c# - 如何从忽略字符串空格的列表中检索字符串元素?【英文标题】:How to retrieve a string element from a list ignoring string spaces in c#? 【发布时间】:2022-01-19 22:21:31 【问题描述】:

简单的问题。

我有一个名为“searchTerm”的字符串变量和一个字符串列表。我如何检索与我的 searchTerm 变量匹配而忽略空格的某个元素。我一直在尝试但没有成功的一个例子:

string searchTerm = "The Lord Of The Rings"
List<string> films = new List<string>() "Harry Potter", "Avangers", "The Lord  Of The Rings", "Back to the future";
string film = films.where(film => film.Contains(searchTerm, StringComparison.OrdinalIgnoreCase));

此代码不起作用。请理解,在电影列表中,“指环王”字符串在 Lord word 之后有两个空格,而 searchTerm 只是有一个空格。

我尝试了以下方法但没有成功:

string film = films.where(film => film.Replace(" ","").Contains(searchTerm.Replace(" ",""), StringComparison.OrdinalIgnoreCase));

您能帮我找到解决方案吗?谢谢

【问题讨论】:

为什么标题有两个空格?您是否可以选择规范化空格以使其只有一个? @JonathanWood 不。只是试图避免 webapp 中的用户可能会做的事情。他们可以用一堆空格命名事物,甚至不知道自己添加了额外的空格。 问题是,用户可以输入任何内容,包括拼写错误,或者“复仇者联盟”与“复仇者联盟”之间的语法差异,您可能应该使用电影数据库中的 api,并实现自动完成并强制用户从该列表中进行选择。否则你会遇到很多问题。 @BrettJenkins 你是对的!感谢您分享您的想法!实际上,我正在开发一个更复杂的应用程序,并且只是使用一个带有几个电影名称的简单字符串列表来做一个简单的例子。谢谢你的帮助,你是绝对正确的! @JuanCamiloÁvila:那我不知道你为什么接受一个标准化空白的答案,这正是我要建议的。 【参考方案1】:

为什么不直接使用简单的正则表达式替换和字符串比较呢? DotNet Fiddle

using System;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.Linq;                  

string searchterm = "The Lord Of The Rings";
List<string> films = new List<string>  "Harry Potter", "Avangers", "The Lord  Of The Rings", "Back to the future";
string film = films
.FirstOrDefault(f => string.Equals(Regex.Replace(f, "\\s", ""), Regex.Replace(searchterm, "\\s", ""), StringComparison.CurrentCultureIgnoreCase));

【讨论】:

感谢您的帮助! :) 这行得通

以上是关于c# - 如何从忽略字符串空格的列表中检索字符串元素?的主要内容,如果未能解决你的问题,请参考以下文章

Haskell:从字符串列表中删除空格

从字符串 C++ 中读取单词,同时忽略空格、数字和符号。

如何使用 c# 从 azure blob 存储中检索 xml 文件

C#列表比较忽略类项

在 HTML 中呈现字符串并保留空格和换行符

如何从字符串列表中检索部分匹配项