(过客)正则表达式 或者C#语言判断字符是否同时存在

wang520d 2007-06-19 04:39:17
下面给出的变量abc不确定 我的目的是确定“类似字符串”是否同时存在 换句话说判断某个字符串一定存在在某个字符串中;

string abc = "我的minisd卡";
int a = abc.IndexOf("minisd卡");
int b = abc.IndexOf("sd卡");

if (a > -1 && b == -1)
Console.WriteLine("有minisd");
else if (a == -1 && b > -1)
Console.WriteLine("有sd");
else if (a > -1 && b > -1)
Console.WriteLine("同时存在");

=====上面判断是错误的 因为结果为同时存在。。。
...全文
1416 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
wang520d 2007-06-19
  • 打赏
  • 举报
回复
谢谢各位的帮忙 问题解决拉 结贴。。。
wang520d 2007-06-19
  • 打赏
  • 举报
回复
正则我反正是门外汉 问题解决了 就阿弥陀佛拉。。。
-过客- 2007-06-19
  • 打赏
  • 举报
回复
[\.\$\^\{\[\(\|\)\*\+\?\\]
--------------------------------
这正则写的有点。。。龌龊
--------------------------------
是相当龌龊-_-#,为了统一,顺便照顾可读性而已
CrazyGou 2007-06-19
  • 打赏
  • 举报
回复
没什么问题,就是有点猥琐
-过客- 2007-06-19
  • 打赏
  • 举报
回复
这行代码改一下就行了

argChe = Regex.Replace(argChe, @"[\u4E00-\u9FA5\.\$\^\{\[\(\|\)\*\+\?\\]", "");
wang520d 2007-06-19
  • 打赏
  • 举报
回复
[\.\$\^\{\[\(\|\)\*\+\?\\]
--------------------------------
这正则写的有点。。。龌龊
==================
什么问题呢?
wang520d 2007-06-19
  • 打赏
  • 举报
回复
这样的好处是可以 匹配上这样的情况 misd卡,sd卡s 所以想用正则一起处理待搜索的字符串
CrazyGou 2007-06-19
  • 打赏
  • 举报
回复
[\.\$\^\{\[\(\|\)\*\+\?\\]
--------------------------------
这正则写的有点。。。龌龊
wang520d 2007-06-19
  • 打赏
  • 举报
回复
也就是把待检查的字符串(argChe) 过滤掉中文后 再带入正则表达式中。。
wang520d 2007-06-19
  • 打赏
  • 举报
回复
就是说 我把从数据库取出来的 “sd卡” 变成“sd” 作为要搜索的字符。。
-过客- 2007-06-19
  • 打赏
  • 举报
回复
待检查的字符串能不能过滤汉字
---------------------------
什么目的,不明白的说
wang520d 2007-06-19
  • 打赏
  • 举报
回复
过客 待检查的字符串能不能过滤汉字(argChe待检查字符串)
flashlove2008 2007-06-19
  • 打赏
  • 举报
回复
话句话说我现在就是要找出我给出的字符的左右两边都不是字母的项
打个比方 : minisd卡,我的sd卡,my sd卡 这种情况就能匹配出2个sd卡

==============
楼主这么说就看懂你的意思了。看你刚发贴的话我迷糊,先帮你顶一下 回去研究
-过客- 2007-06-19
  • 打赏
  • 举报
回复
这些符号在正则中是有特殊意义的,这种含有变量的正则表达式,如果在待检查的字符串中出现了这些符号,有的会导致查找失败,有的会导致程序抛异常,所以在使用之前要先做下预处理,基本上相当于在搜索引擎中,你无法搜索一些特殊符号一样

因为看你的要求,待检查的字符串中不会出现特殊符号,这个只是为了以防万一
wang520d 2007-06-19
  • 打赏
  • 举报
回复
argChe = Regex.Replace(argChe, @"[\.\$\^\{\[\(\|\)\*\+\?\\]", "")
======================== 这句是做什么处理??
wang520d 2007-06-19
  • 打赏
  • 举报
回复
我看看你的方法 先。。
-过客- 2007-06-19
  • 打赏
  • 举报
回复
如果是这个要求,写了一个通用方法

//参数说明:argSrc源字符串,argChe待检查字符串
private bool CheckWord(string argSrc, string argChe)
{
argChe = Regex.Replace(argChe, @"[\.\$\^\{\[\(\|\)\*\+\?\\]", "");
if (Regex.IsMatch(argSrc, @"(?<![a-z])" + argChe + @"(?![a-z])", RegexOptions.IgnoreCase))
return true;
else
return false;
}

这里返回的是一个bool值,当然也可以返回其它类型,或者是匹配到的次数
wang520d 2007-06-19
  • 打赏
  • 举报
回复
Response.Write(Regex.IsMatch("minisd卡", @"([^a-zA-Z]+|^)sd([^a-zA-Z]+|$)"));

minisd卡 false
我的sd卡 true
my sd卡 true
sd true
================
哈哈 用你的方法 貌似OK拉 我再测试下。。。
wang520d 2007-06-19
  • 打赏
  • 举报
回复
过客 我的需求换句话说是这样的 看能不能实现 “求给出字符串中(minisd卡阿斯顿飞洒到访我的sd卡阿斯顿飞my sd卡) 要查找的字符串(sd卡) 左右两边不为字母的就是符合要求的。。” 所以上面的字符串中能匹配出两个SD卡来。。
-过客- 2007-06-19
  • 打赏
  • 举报
回复
刚才吃饭去了

这个要看你实现的功能而定,你的源字符串和要匹配的内容都是不确定的吧

检查单个的,这样写

if(Regex.IsMatch(yourStr, @"\bsd卡\b", RegexOptions .IgnoreCase))
{
richTextBox2.Text = "存在";
}
else
{
richTextBox2.Text = "不存在";
}

但是如果检查多个的,如果要检查多个,可以写成个方法,每次传进一个参数,给个返回值

但是还有种情况,比如说你要查三个词,其中两两同时存在算一种情况,三个同时存在算一种情况,这个是否区分,或者说只检查三个是否同时存在就可以了
加载更多回复(18)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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