C#中string字符串的模糊查找

VCACC 2010-11-11 09:14:07
有一个很大的string字符串,比如string strText="我爱CSDN我爱CSDN我爱CSDN我爱和 谐CSDN我爱CSDN我爱CSDN",要查找其中的和谐关键字,其中关键中可能存在空格或者Tab键,或者两者组合,该怎么实现这个查询呢?string的的indexOf函数好像只能查找出关键字连续的,对于关键字中有空白符的好像查不到。
...全文
4775 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
VCACC 2010-11-15
  • 打赏
  • 举报
回复
不好意思各位,结贴晚了。最后我用正则表达式解决了。表达式为^[\S \s]*(和\s*谐)[\S \s]*$,这样可很方便的获取匹配项和匹配位置。结贴。
mycroo 2010-11-12
  • 打赏
  • 举报
回复
ls正解,正则。
snowmagic 2010-11-12
  • 打赏
  • 举报
回复
regex
sprc_lcl 2010-11-12
  • 打赏
  • 举报
回复
            string strText = "我爱CSDN我爱CSDN我爱CSDN我爱和 谐CSDN我爱CSDN我爱CSDN";
string key = "和谐";
string key2 = "(?is)";
for (int i = 0; i < key.Length; i++)
{
key2 += key[i].ToString();
if(i < key.Length - 1) key2 += @"\s*";
}

MatchCollection mc = Regex.Match(strText, key2);
foreach (Match m in mc)
{
m.Value;//匹配出来的值
}
flyerwing 2010-11-12
  • 打赏
  • 举报
回复
contains("keyword”));
这样不知道成不成了
xiaojinlai 2010-11-12
  • 打赏
  • 举报
回复
去掉符号或空格在查询字符串,用contains
woszsj 2010-11-12
  • 打赏
  • 举报
回复
xxxx=contains
woszsj 2010-11-12
  • 打赏
  • 举报
回复
这个问题貌似就是字符串是否包含某关键字嘛 用字符串的xxxx属性就ok了吧
kid_wang 2010-11-12
  • 打赏
  • 举报
回复
这个貌似在数据库里就是用like 和 各种%就可以了
小海贼 2010-11-12
  • 打赏
  • 举报
回复
给你个最终答案:
正则表达式 c#的
foreach (Match m in Regex.Matches(str, "和([\\s,\\t])*谐"))
MessageBox.Show(m.Value);

str为你要查找的字符窜,空格和tab
兔子-顾问 2010-11-11
  • 打赏
  • 举报
回复
那就是说搜索ab和 a b效果会是一样的了?
VCACC 2010-11-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wuyazhe 的回复:]
关键在你自己要想明白。
a bcdabcd
你搜索ab或是搜索a b。结果是否表示一样?
[/Quote]

我要搜索ab,在字符串中的ab中间可有任意个数的空白符。
VCACC 2010-11-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 claymore1114 的回复:]
有空格 表示 不同的关键字,不同的含义。

C# code

string strText = "我爱CSDN我爱CSDN我爱CSDN我爱和 谐CSDN我爱CSDN我爱CSDN";
List<string> listKey = new List<string>() { "和谐", "和 谐" };
List<int……
[/Quote]
如果关键字中的空格个数不一样呢?还有可能是空格和TAb的组合,那不是有很多关键字?
claymore1114 2010-11-11
  • 打赏
  • 举报
回复
有空格 表示 不同的关键字,不同的含义。

string strText = "我爱CSDN我爱CSDN我爱CSDN我爱和 谐CSDN我爱CSDN我爱CSDN";
List<string> listKey = new List<string>() { "和谐", "和 谐" };
List<int> indexs = new List<int>();
listKey.ForEach(s => indexs.Add(strText.IndexOf(s)));

indexs.ForEach(s => { if (s > -1) Console.WriteLine(s); });
兔子-顾问 2010-11-11
  • 打赏
  • 举报
回复
关键在你自己要想明白。
a bcdabcd
你搜索ab或是搜索a b。结果是否表示一样?
wjq 2010-11-11
  • 打赏
  • 举报
回复
1:去掉符号/空格等后判断
2:正则
VCACC 2010-11-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 phil999 的回复:]
去掉空格

bool b = strText.replace(" ", "").contains("keyword”));

tab,换行这些都一个思路,用正则可以一下全去掉
[/Quote]

contains不能返回关键字的索引。用正则去掉字符串中的空白符,然后用indexOf查找,此法应该可行。
phil999 2010-11-11
  • 打赏
  • 举报
回复
去掉空格

bool b = strText.replace(" ", "").contains("keyword”));

tab,换行这些都一个思路,用正则可以一下全去掉

ckman123 2010-11-11
  • 打赏
  • 举报
回复
同问 这个怎么解决
_Will_ 2010-11-11
  • 打赏
  • 举报
回复
先Trim()一下呗。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧