C# 一个截取指定前后缀的字符串的正则表达式

wonderful_abc 2011-03-15 05:35:58
比如:我要在文本中截取xxx和yyy之间的字符串(注:xxx和yyy都有可能含有空格、回车换行等特殊的字符)
例如:
xxxABCyyy中,截取出ABC
这个正则表达式该怎么写?
求正则达人相助!
...全文
1101 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
你的选择H 2011-03-15
  • 打赏
  • 举报
回复

string myString = "xxxxSHENBAOyyy";

//正声明(?=yyy) 负声明(?!xxxx)声明本身不作为匹配结果的一部分
Regex myRegex = new Regex(@"SHENBAO(?=yyy)(?!xxxx)");
Console.WriteLine(myRegex.Match(myString).Value);

//输出结果:SHENBAO
jt3000 2011-03-15
  • 打赏
  • 举报
回复

using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string str = "asdfxxx32\r\n1y\r\ny31yyyy";
Regex r = new Regex(@"xxx([\w\W]*?)yyy");
Match m = r.Match(str);
Console.Write(m.Groups[1].ToString());
Console.ReadLine();
}
}
}

加分吧
兔子-顾问 2011-03-15
  • 打赏
  • 举报
回复
string pattern = "(?is)(?<=" + Regex.Escape("前面")+").+?(?="+Regex.Escape("后面")+")";
Regex reg = new Regex(pattern);
reg.Match(yourStr).Value;//就是你要的
laichunlin 2011-03-15
  • 打赏
  • 举报
回复
既然xxx,yyy是已知的那用空格替换它然后去掉前后空格不就行了。就可以不写正则了!
灬嘻嘻哈哈灬 2011-03-15
  • 打赏
  • 举报
回复
RegexOptions.Singleline,指的是正则中的元字符.(就是点号)可以匹配换行符。。

RegexOptions.Multiline,指的是更改 ^ 和 $ 的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。。

两者没有联系。。不能看字面意思。。
wonderful_abc 2011-03-15
  • 打赏
  • 举报
回复
happyyst:为什么要用RegexOptions.Singleline,因为允许多行匹配,不是应该用RegexOptions.Multiline么?
「已注销」 2011-03-15
  • 打赏
  • 举报
回复
唉, 代码里面不能插高亮,你把那几个标记去掉
public static List<string> GetStringsBetween(string content, string beginString, string endString, bool ignoreCase)
{
List<string> list = new List<string>();
string pattern = "(?<=" + beginString + ").*(?=" + endString + ")";
RegexOptions ro = RegexOptions.Singleline;
if (ignoreCase)
ro = RegexOptions.IgnoreCase | RegexOptions.Singleline;
MatchCollection mats = Regex.Matches(content, pattern, ro);
foreach (Match mat in mats)
{
list.Add(mat.Value);
}
return list;
}
「已注销」 2011-03-15
  • 打赏
  • 举报
回复
 public static List<string> GetStringsBetween(string content, string beginString, string endString, bool ignoreCase)
{
List<string> list = new List<string>();
string pattern = "(?<=" + beginString + ").*(?=" + endString + ")";
RegexOptions ro = RegexOptions.Singleline;
if (ignoreCase)
ro = RegexOptions.IgnoreCase | RegexOptions.Singleline;
MatchCollection mats = Regex.Matches(content, pattern, ro);
foreach (Match mat in mats)
{
list.Add(mat.Value);
}
return list;
}

static void Main()
{
string str = @"123hjkl456
qwer
789 tyui
&jsad#op
zxc@v
mnb v567cxz";
string str1 = @"123hjkl456
qwer
789 tyui
&";
string str2 = @"@v
mnb v567cxz";
List<string> list = GetStringsBetween(str, str1, str2, true);
}

我试了下, list里面的内容是
jsad#op
zxc
wonderful_abc 2011-03-15
  • 打赏
  • 举报
回复
不好意思,我的代码中“fullpath”应该是“mat.Value”
wonderful_abc 2011-03-15
  • 打赏
  • 举报
回复
xxx,yyy,以及它们之间的ABC都可能包含空格、回车换行等特殊字符。大家要把这三者当成最一般的文本看待,千万不要想当然,我觉得我已经说的再详细不过了....
马老虎 2011-03-15
  • 打赏
  • 举报
回复
注:xxx和yyy都有可能含有空格、回车换行等特殊的字符

--------------
意思是 xxx yyy这些字母中包含空格??
还是 之间的内容包含???
wonderful_abc 2011-03-15
  • 打赏
  • 举报
回复
(?<=xxx).*(?=yyy)不行哦,我的代码如下,请各位参详:

public static List<string> GetStringsBetween(string content, string beginString, string endString, bool ignoreCase)
{
List<string> list = new List<string>();
string pattern = "(?<=" + beginString + ").*(?=" + endString + ")";
RegexOptions ro = RegexOptions.Multiline;
if (ignoreCase)
ro = RegexOptions.IgnoreCase | RegexOptions.Multiline;
MatchCollection mats = Regex.Matches(content, pattern, ro);
foreach (Match mat in mats)
{
list.Add(fullpath);
}
return list;
}
gggscfaii 2011-03-15
  • 打赏
  • 举报
回复
提供一下javascript中的正则,c sharp我不熟。但原理应该是一样的。

var s="xxxabcyyy";

s=s.replace(/(xxx)(.*)(yyy)/gi,$2);
应该是这意思。。。哈哈!!!
「已注销」 2011-03-15
  • 打赏
  • 举报
回复
(?<=xxx).*(?=yyy)
wonderful_abc 2011-03-15
  • 打赏
  • 举报
回复
xxx和ABC没有任何区别,都是最一般的文本(可能有多行,也可能含有特殊字符)
现在整体文本TEXT,xxx以及yyy是已知的,求xxx和yyy之间的文本(代号:ABC)
假设整体文本TEXT=
123hjkl456
qwer
789 tyui
&jsad#op
zxc@v
mnb v567cxz
要求在xxx=
"789 tyui
&"

yyy=
"@v
mnb"
之间的文本。
即求出ABC=
"jsad#op
zxc"

不知道我这么说够不够详细清楚?
灬嘻嘻哈哈灬 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wonderful_abc 的回复:]

引用 1 楼 caozhy 的回复:
xxx.*yyy

假设有空白,可以用\s。


我是想将ABC"原汁原味"地取出来,而不管它里面是否有空白或其他特殊字符
[/Quote]


既然ABC里面也有可能有空白或其他特殊字符,xxx和yyy也都有可能含有空格、回车换行等特殊的字符。。


那xxx和ABC的区别在哪里。。


举个具体例子吧。。
wonderful_abc 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 caozhy 的回复:]
xxx.*yyy

假设有空白,可以用\s。
[/Quote]

我是想将ABC"原汁原味"地取出来,而不管它里面是否有空白或其他特殊字符
HimeTale 2011-03-15
  • 打赏
  • 举报
回复
(?<=xxx).*?(?=yyy)
threenewbee 2011-03-15
  • 打赏
  • 举报
回复
xxx.*yyy

假设有空白,可以用\s。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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