例如:
xxxABCyyy中,截取出ABC
这个正则表达式该怎么写?
求正则达人相助!
21 个解决方案
#1
xxx.*yyy
假设有空白,可以用\s。
假设有空白,可以用\s。
#2
(?<=xxx).*?(?=yyy)
#3
我是想将ABC"原汁原味"地取出来,而不管它里面是否有空白或其他特殊字符
#4
#5
既然ABC里面也有可能有空白或其他特殊字符,xxx和yyy也都有可能含有空格、回车换行等特殊的字符。。
那xxx和ABC的区别在哪里。。
举个具体例子吧。。
#6
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"
不知道我这么说够不够详细清楚?
现在整体文本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"
不知道我这么说够不够详细清楚?
#7
(?<=xxx).*(?=yyy)
#8
提供一下javascript中的正则,c sharp我不熟。但原理应该是一样的。
var s="xxxabcyyy";
s=s.replace(/(xxx)(.*)(yyy)/gi,$2);
应该是这意思。。。哈哈!!!
var s="xxxabcyyy";
s=s.replace(/(xxx)(.*)(yyy)/gi,$2);
应该是这意思。。。哈哈!!!
#9
(?<=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;
}
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;
}
#10
注:
xxx和yyy都有可能含有空格、回车换行等特殊的字符
--------------
意思是 xxx yyy这些字母中包含空格??
还是 之间的内容包含???
--------------
意思是 xxx yyy这些字母中包含空格??
还是 之间的内容包含???
#11
xxx,yyy,以及它们之间的ABC都可能包含空格、回车换行等特殊字符。大家要把这三者当成最一般的文本看待,千万不要想当然,我觉得我已经说的再详细不过了....
#12
不好意思,我的代码中“fullpath”应该是“mat.Value”
#13
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
#14
唉, 代码里面不能插高亮,你把那几个标记去掉
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;
}
#15
happyyst:为什么要用RegexOptions.Singleline,因为允许多行匹配,不是应该用RegexOptions.Multiline么?
#16
RegexOptions.Singleline,指的是正则中的元字符.(就是点号)可以匹配换行符。。
RegexOptions.Multiline,指的是更改 ^ 和 $ 的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。。
两者没有联系。。不能看字面意思。。
RegexOptions.Multiline,指的是更改 ^ 和 $ 的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。。
两者没有联系。。不能看字面意思。。
#17
既然xxx,yyy是已知的那用空格替换它然后去掉前后空格不就行了。就可以不写正则了!
#18
string pattern = "(?is)(?<=" + Regex.Escape("前面")+").+?(?="+Regex.Escape("后面")+")";
Regex reg = new Regex(pattern);
reg.Match(yourStr).Value;//就是你要的
#19
#20
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();
}
}
}
加分吧
#21
string myString = "xxxxSHENBAOyyy";
//正声明(?=yyy) 负声明(?!xxxx)声明本身不作为匹配结果的一部分
Regex myRegex = new Regex(@"SHENBAO(?=yyy)(?!xxxx)");
Console.WriteLine(myRegex.Match(myString).Value);
//输出结果:SHENBAO
#1
xxx.*yyy
假设有空白,可以用\s。
假设有空白,可以用\s。
#2
(?<=xxx).*?(?=yyy)
#3
我是想将ABC"原汁原味"地取出来,而不管它里面是否有空白或其他特殊字符
#4
#5
既然ABC里面也有可能有空白或其他特殊字符,xxx和yyy也都有可能含有空格、回车换行等特殊的字符。。
那xxx和ABC的区别在哪里。。
举个具体例子吧。。
#6
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"
不知道我这么说够不够详细清楚?
现在整体文本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"
不知道我这么说够不够详细清楚?
#7
(?<=xxx).*(?=yyy)
#8
提供一下javascript中的正则,c sharp我不熟。但原理应该是一样的。
var s="xxxabcyyy";
s=s.replace(/(xxx)(.*)(yyy)/gi,$2);
应该是这意思。。。哈哈!!!
var s="xxxabcyyy";
s=s.replace(/(xxx)(.*)(yyy)/gi,$2);
应该是这意思。。。哈哈!!!
#9
(?<=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;
}
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;
}
#10
注:
xxx和yyy都有可能含有空格、回车换行等特殊的字符
--------------
意思是 xxx yyy这些字母中包含空格??
还是 之间的内容包含???
--------------
意思是 xxx yyy这些字母中包含空格??
还是 之间的内容包含???
#11
xxx,yyy,以及它们之间的ABC都可能包含空格、回车换行等特殊字符。大家要把这三者当成最一般的文本看待,千万不要想当然,我觉得我已经说的再详细不过了....
#12
不好意思,我的代码中“fullpath”应该是“mat.Value”
#13
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
#14
唉, 代码里面不能插高亮,你把那几个标记去掉
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;
}
#15
happyyst:为什么要用RegexOptions.Singleline,因为允许多行匹配,不是应该用RegexOptions.Multiline么?
#16
RegexOptions.Singleline,指的是正则中的元字符.(就是点号)可以匹配换行符。。
RegexOptions.Multiline,指的是更改 ^ 和 $ 的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。。
两者没有联系。。不能看字面意思。。
RegexOptions.Multiline,指的是更改 ^ 和 $ 的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。。
两者没有联系。。不能看字面意思。。
#17
既然xxx,yyy是已知的那用空格替换它然后去掉前后空格不就行了。就可以不写正则了!
#18
string pattern = "(?is)(?<=" + Regex.Escape("前面")+").+?(?="+Regex.Escape("后面")+")";
Regex reg = new Regex(pattern);
reg.Match(yourStr).Value;//就是你要的
#19
#20
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();
}
}
}
加分吧
#21
string myString = "xxxxSHENBAOyyy";
//正声明(?=yyy) 负声明(?!xxxx)声明本身不作为匹配结果的一部分
Regex myRegex = new Regex(@"SHENBAO(?=yyy)(?!xxxx)");
Console.WriteLine(myRegex.Match(myString).Value);
//输出结果:SHENBAO