VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2924|回复: 20

正则表达式。网上找了了很久都没有答案!在线求教

[复制链接]

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-2-16 16:30:01 | 显示全部楼层 |阅读模式
比如一个字串:
aadfgsdg             取aadfgsdg      
aajsa;kfjn          取aajsa;kfjn
(adfasf)aa           取aa
asfdasfaaaaas323     不能取到值
afffasfdaaakjasdfa   不能取到值
adfafffdaa........   取aa........
要求
1)取从aa开始后的内容。
2) aa字串后可能没有,如果有也不能为a
3) aa字串前可能没有,如果有不能为a
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-4-18 06:30:01 | 显示全部楼层
多半无解了!
回复

使用道具 举报

0

主题

11

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-4-19 00:30:02 | 显示全部楼层
不是很明白楼主的目的,不过按你的要求,用下面的试下,测试通过

string yourStr = textBox1.Text ;
Match m=Regex.Match(yourStr,".*?(?<!a)(aa(?!a).*)");
textBox2.Text =m.Groups[1].Value;   //Groups[1].Value为所要提取的内容
回复

使用道具 举报

0

主题

38

帖子

22.00

积分

新手上路

Rank: 1

积分
22.00
发表于 2020-4-19 16:00:01 | 显示全部楼层
^(?=[^a]*)aa[^a]*$
回复

使用道具 举报

0

主题

38

帖子

22.00

积分

新手上路

Rank: 1

积分
22.00
发表于 2020-4-20 08:15:01 | 显示全部楼层
[^a] 的意思的是 a的取反字符集
aa[^a]* 的意思的是 aa后面可能有非a字符
(?=[^a]*) 的意思的是 向前查看,前面可能有非a字符但不包含在匹配内
^开始标志
$结束标志
回复

使用道具 举报

0

主题

110

帖子

63.00

积分

新手上路

Rank: 1

积分
63.00
发表于 2020-4-21 09:15:01 | 显示全部楼层
写了个比较麻烦的..

Regex rx = new Regex(@"^([\s\S]*[^a])?(aa([^a][\s\S]*)?)$");
Match m = rx.Match(str);
if (m.Success)
{
     Console.WriteLine(m.Groups[2].Value);
}

回复

使用道具 举报

0

主题

110

帖子

63.00

积分

新手上路

Rank: 1

积分
63.00
发表于 2020-4-21 09:45:01 | 显示全部楼层
测试:

Regex rx = new Regex(@"^([\s\S]*[^a])?(aa([^a][\s\S]*)?)$");

            string str = Console.ReadLine();
            while (str != "exit")
            {
                Match m = rx.Match(str);
                if (m.Success)
                {
                    Console.WriteLine(m.Groups[2].Value);
                }
                str = Console.ReadLine();
            }
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-4-26 13:30:01 | 显示全部楼层
                        string str  = "asfdaasfas323";
                        string str2 = System.Text.RegularExpressions.Regex.Replace(str,"^aa|.*?[^a]aa(?!a)","$");
                        if (str.Equals(str2))
                        {
                                Response.Write("空");
                        }
                        else
                        {
                                Response.Write(str2);
                        }
哈哈,很难,不过竟然被我蒙出来了,测试通过!
回复

使用道具 举报

0

主题

20

帖子

15.00

积分

新手上路

Rank: 1

积分
15.00
发表于 2020-5-24 18:15:01 | 显示全部楼层
string str="adfafffdaa........";
Regex reg=new Regex("((?<=[^a])|^)aa(([^a].*)|$)");
str=reg.Match(a).Value;
//这样应该没问题
回复

使用道具 举报

0

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-5-25 10:45:01 | 显示全部楼层
^[^a]*?(aa(?!a).*)|[^a](aa[^a]*?)$
注意:取值时$1和$2的值可以一起取,必有一个为空、另一个为正解。

aadfgsdg             取aadfgsdg    (取$1)   
aajsa;kfjn          取aajsa;kfjn  (取$1)
(adfasf)aa           取aa          (取$2)
asfdasfaaaaas323     不能取到值
afffasfdaaakjasdfa   不能取到值
adfafffdaa........   取aa........  (取$2)

C#查找匹配:
using System.Text.RegularExpressions;

// 正则表达式对象
Regex re = new Regex(@"^[^a]*?(aa(?!a).*)|[^a](aa[^a]*?)$");

// Match 对象
Match m = re.Match("your string");

// 是否找到
if( m.Success )
{
    // 找到
}
else
{
    // 未找到
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表