用正则匹配指定字符

大Y 2011-04-02 10:40:24
原字符串如下:

  string str = "[Fields!USE_0004_0002.Value]/[Fields!USE_0004_0003.Value]+[Fields!USE_0004_0008.Value]^[Fields!USE_0004_0009.Value]";

现在需求是分析str是否包含如果字符:^ * / \ Mod + -


 求正则来验证,其它方法也能够解决,想用正则试试!


  




...全文
354 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
大Y 2011-04-04
  • 打赏
  • 举报
回复



谢谢各位了
-过客- 2011-04-03
  • 打赏
  • 举报
回复
再加个匹配模式好点
Regex reg = new Regex(@"(?in)((?!Mod)[^^*/\\+-])+");
-过客- 2011-04-03
  • 打赏
  • 举报
回复
如果仅仅是判断包不包含

string str = "[Fields!USE_0004_0002.Value]/[Fields!USE_0004_0003.Value]+[Fields!USE_0004_0008.Value]^[Fields!USE_0004_0009.Value]";
if (Regex.IsMatch(str, @"(?i)[-^*/\\+]|Mod"))
{
richTextBox2.Text = "包含";
}
else
{
richTextBox2.Text = "不包含";
}


字符组[]的效率要高于分支结构(...|...)
^在[]中只有出现在首位置时才是元字符,匹配其本身时需要转义,在其它位置时不是元字符,不需转义
[]支持用连字符“-”连接两个字符,来表示一个字符范围。需要注意的是,“-”前后的两个字符是有顺序的,即使用相同的编码时,后面的字符码位应大于或等于前面字符的码位。当匹配其本身时,“-”在首位置或结束位置,不需转义,在其它位置,是需要转义的
其余的字符除“\”、“[”、“]”外,在[]中都不需要转义即匹配其本身,事实上,在.NET中,“[”和“]”也不是必须转义的,只不过如果把握不好这种规则,还是转义的好

如果是想提取这些分割符之外的子串
string str = "[Fields!USE_0004_0002.Value]/[Fields!USE_0004_0003.Value]+[Fields!USE_0004_0008.Value]^[Fields!USE_0004_0009.Value]";
Regex reg = new Regex(@"(?i)((?!Mod)[^^*/\\+-])+");
MatchCollection mc = reg.Matches(str);
foreach(Match m in mc)
{
richTextBox2.Text += m.Value + "\n";
}
/*------输出-------
[Fields!USE_0004_0002.Value]
[Fields!USE_0004_0003.Value]
[Fields!USE_0004_0008.Value]
[Fields!USE_0004_0009.Value]
*/
大Y 2011-04-02
  • 打赏
  • 举报
回复

原字符串如下:
  string str = "[Fields!USE_0004_0002.Value]/[Fields!USE_0004_0003.Value]+[Fields!USE_0004_0008.Value]^[Fields!USE_0004_0009.Value]";

现在需求是分析str是否包含如果字符:^ * / \ Mod + -

 加上一条件!
用^ * / \ Mod + - 这几个字符串分析出字段信息,可以吗?还用正则来写!!
如[Fields!USE_0004_0002.Value]....


 
zsyok 2011-04-02
  • 打赏
  • 举报
回复
Regex reg = new Regex(@"(?:\^|\*|/|\\|Mod|\+|-)");
fk1984316 2011-04-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 huangwenquan123 的回复:]

C# code
string str = "[Fields!USE_0004_0002.Value]/[Fields!USE_0004_0003.Value]+[Fields!USE_0004_0008.Value]^[Fields!USE_0004_0009.Value]";
Regex reg = new Regex(@"(?:\^|\*|/……
[/Quote]

+1
大Y 2011-04-02
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 dalmeeme 的回复:]

放弃……,看来有必要专门学下正则,瞎猜是不行的。
[/Quote]
[\*+-/\^\\]|Mod

这里面都加上一个转义\就OK 了,你在试一下!

一块学习吧


dalmeeme 2011-04-02
  • 打赏
  • 举报
回复
放弃……,看来有必要专门学下正则,瞎猜是不行的。
lanqiang456 2011-04-02
  • 打赏
  • 举报
回复
正则最头痛`````帮顶``````
dalmeeme 2011-04-02
  • 打赏
  • 举报
回复
晕,还是不对~~
dalmeeme 2011-04-02
  • 打赏
  • 举报
回复
这样好像行了[\*+-/\^\\]|Mod
dalmeeme 2011-04-02
  • 打赏
  • 举报
回复
[*+-/\^\\]|Mod
大Y 2011-04-02
  • 打赏
  • 举报
回复
我刚学理解有限,说错了不要怪哦,呵呵,不过多取出来个点,还好了,取出我要的操作符了
dalmeeme 2011-04-02
  • 打赏
  • 举报
回复
[]里的*不是通配符啊
大Y 2011-04-02
  • 打赏
  • 举报
回复


也是,呵呵
谢了
别样苍茫 2011-04-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hongleidy5000 的回复:]
引用 2 楼 luqc1985 的回复:

\^|\*|\/|\\|(Mod)|\+|\-


输 出结果为 d+d+d^d
是不是Mod不能放里面去!
不过还是谢谢了
[/Quote]

你不是只要判断是否包含这些就可以吗?如果包含后返回 布尔值 不就OK鸟?
大Y 2011-04-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 huangwenquan123 的回复:]

C# code
string str = "[Fields!USE_0004_0002.Value]/[Fields!USE_0004_0003.Value]+[Fields!USE_0004_0008.Value]^[Fields!USE_0004_0009.Value]";
Regex reg = new Regex(@"(?:\^|\*|/……
[/Quote]

7楼的可以用,谢谢

大Y 2011-04-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dalmeeme 的回复:]

[*+-/\\]|Mod
[/Quote]
这位分友,*是通配符吧,在取的时候会多个.取出来!不行
大Y 2011-04-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 luqc1985 的回复:]

\^|\*|\/|\\|(Mod)|\+|\-
[/Quote]

输 出结果为 d+d+d^d
是不是Mod不能放里面去!
不过还是谢谢了
huangwenquan123 2011-04-02
  • 打赏
  • 举报
回复
            string str = "[Fields!USE_0004_0002.Value]/[Fields!USE_0004_0003.Value]+[Fields!USE_0004_0008.Value]^[Fields!USE_0004_0009.Value]";
Regex reg = new Regex(@"(?:\^|\*|/|\\|Mod|\+|-)");
Response.Write(reg.Match(str).Success);
加载更多回复(6)

62,073

社区成员

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

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

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

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