VerySource

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

求一正则表达式模式串

[复制链接]

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-2-13 13:30:01 | 显示全部楼层 |阅读模式
给定输入串,用正则表达式怎样搜索第一次出现标记a和第一次出现标记b之间的结果.
其中标记a,b可以是任意的字符串.
比如有abc<symbol>def</symbol>ghi<symbol>jkl</symbol>
怎样得到<symbol>和</symbol>之间的def?
先行谢过了!
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-4-11 18:45:01 | 显示全部楼层
俺的思路是:先找出<symbol>def</symbol>,再替换掉<symbol>和</symbol>。
回复

使用道具 举报

0

主题

11

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-4-13 20:15:01 | 显示全部楼层
楼主所给的条件中,还需要明确一些内容,就是a和b,a和b虽然可以是变化的,但是必须要满足一定的条件,比如说它是成对出现的,或遵循一定格式,才可以用正则来匹配,不能是任意的字符串,否则无法确定哪个是你想要的a和b,举个例子,a和b分别如下
<a>和</a>
<font>和</font>
这样的,以及你给的例子,都可以用下面的正则来取出你想要的内容

String yourStr=textBox1.Text ;
Match m=Regex.Match(yourStr,"<(.*)>(.*?)</\\1>");
textBox2.Text = m.Groups [2].Value ;  //m.Groups [2].Value为所要提取的内容

这只是个例子,还需要你指明a和b的限定条件,才能给出真正是你需要的正则
回复

使用道具 举报

0

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-5-9 16:15:02 | 显示全部楼层
如楼上所说,要求比较模糊,你试试这个是不是你要的
<[^>]*>([^<]*)</[^>]*>

using System.Text.RegularExpressions;

// 正则表达式对象
Regex re = new Regex(@"<[^>]*>([^<]*)</[^>]*>");

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

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

使用道具 举报

0

主题

17

帖子

14.00

积分

新手上路

Rank: 1

积分
14.00
发表于 2020-6-17 02:15:01 | 显示全部楼层
string yourStr = ......;
MatchCollection mc = Regex.Matches(yourStr, "<(symbol>)(?<content>.+?)</\\1", RegexOptions.IgnoreCase);
foreach(Match m in mc)
{
    m.Groups["content"].Value;//
}
回复

使用道具 举报

0

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-6-23 09:00:01 | 显示全部楼层
修改楼上地:

string yourStr = @"abc<symbol>def</symbol>ghi<symbol>jkl</symbol>";
MatchCollection mc = Regex.Matches(yourStr, @"<symbol>(?<content>\w+)</symbol>");
foreach(Match m in mc)
{
    string _resoue = m.Groups["content"].Value;
}
回复

使用道具 举报

0

主题

17

帖子

14.00

积分

新手上路

Rank: 1

积分
14.00
发表于 2020-7-8 12:45:01 | 显示全部楼层
懒懒鱼  


   修改楼上地:

string yourStr = @"abc<symbol>def</symbol>ghi<symbol>jkl</symbol>";
MatchCollection mc = Regex.Matches(yourStr, @"<symbol>(?<content>\w+)</symbol>");
foreach(Match m in mc)
{
    string _resoue = m.Groups["content"].Value;
}

  
===================================================================
你这个有问题,正则表达式默认是贪婪匹配。所以你的匹配结果是"def</symbol>ghi<symbol>jkl"。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-10 20:30:01 | 显示全部楼层
试试这个 (?<=<\w+>).*?(?=<\\\w+>)
回复

使用道具 举报

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

本版积分规则

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

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