正则表达式如何排除某个字符串(高级用法)

时间:2022-01-16 05:51:46
字符串如下:
Haa CCDbb CCD

要求把HaaCCD匹配出来。
其中开始的字符H是固定的
aa,bb的长度和字符内容随机
CCD是固定字符串,所以用[^CCD]是不行的。。

就是要求匹配的字符串结尾是CCD,但是字符串除了结尾外不包含CCD

我试了好多种写法,都不行

求高手。

10 个解决方案

#1


(?<=H).*?CCD

#2


            string test = "HaaCCDbbCCD";
            Regex reg = new Regex(@"(?i)(?<=H).*?CCD");
            Match m = reg.Match(test);
            if (m.Success)
            {
                richTextBox2.Text = m.Value;
            }

#3


或者贪婪模式

            string test = "HaaCCDbbCCD";
            Regex reg = new Regex(@"(?is)(?<=H)(?:(?!CCD).)*CCD");
            Match m = reg.Match(test);
            if (m.Success)
            {
                richTextBox2.Text = m.Value;
            }

#4


(?<=H)
是不是用
H
就可以了?貌似H要保留的

#5


引用楼主 67676373 的回复:
就是要求匹配的字符串结尾是CCD,但是字符串除了结尾外不包含CCD

我试了好多种写法,都不行

求高手。


晕,不就是向前查看吗
看来楼主的正则基础还没打牢啊

#6


H.*?CCD

#7


我咋感觉要用懒惰不用贪婪?

#8


引用 2 楼 lxcnn 的回复:
C# code
            string test = "HaaCCDbbCCD";
            Regex reg = new Regex(@"(?i)(?<=H).*?CCD");
            Match m = reg.Match(test);
            if (m.Success)
            {
         ……


学习

#9


本帖最后由 lxcnn 于 2010-10-08 14:31:27 编辑
哦,H保留啊,那就把(?<=H)换成H就行了

非贪婪模式实现
            string test = "HaaCCDbbCCD";
            Regex reg = new Regex(@"(?i)H.*?CCD");
            Match m = reg.Match(test);
            if (m.Success)
            {
                richTextBox2.Text = m.Value;
            }

贪婪模式实现
            string test = "HaaCCDbbCCD";
            Regex reg = new Regex(@"(?is)H(?:(?!CCD).)*CCD");
            Match m = reg.Match(test);
            if (m.Success)
            {
                richTextBox2.Text = m.Value;
            }

#10


结贴了。。又学到好多东西。

#1


(?<=H).*?CCD

#2


            string test = "HaaCCDbbCCD";
            Regex reg = new Regex(@"(?i)(?<=H).*?CCD");
            Match m = reg.Match(test);
            if (m.Success)
            {
                richTextBox2.Text = m.Value;
            }

#3


或者贪婪模式

            string test = "HaaCCDbbCCD";
            Regex reg = new Regex(@"(?is)(?<=H)(?:(?!CCD).)*CCD");
            Match m = reg.Match(test);
            if (m.Success)
            {
                richTextBox2.Text = m.Value;
            }

#4


(?<=H)
是不是用
H
就可以了?貌似H要保留的

#5


引用楼主 67676373 的回复:
就是要求匹配的字符串结尾是CCD,但是字符串除了结尾外不包含CCD

我试了好多种写法,都不行

求高手。


晕,不就是向前查看吗
看来楼主的正则基础还没打牢啊

#6


H.*?CCD

#7


我咋感觉要用懒惰不用贪婪?

#8


引用 2 楼 lxcnn 的回复:
C# code
            string test = "HaaCCDbbCCD";
            Regex reg = new Regex(@"(?i)(?<=H).*?CCD");
            Match m = reg.Match(test);
            if (m.Success)
            {
         ……


学习

#9


本帖最后由 lxcnn 于 2010-10-08 14:31:27 编辑
哦,H保留啊,那就把(?<=H)换成H就行了

非贪婪模式实现
            string test = "HaaCCDbbCCD";
            Regex reg = new Regex(@"(?i)H.*?CCD");
            Match m = reg.Match(test);
            if (m.Success)
            {
                richTextBox2.Text = m.Value;
            }

贪婪模式实现
            string test = "HaaCCDbbCCD";
            Regex reg = new Regex(@"(?is)H(?:(?!CCD).)*CCD");
            Match m = reg.Match(test);
            if (m.Success)
            {
                richTextBox2.Text = m.Value;
            }

#10


结贴了。。又学到好多东西。