C# 以字符串开头的正则表达式
我想用正则表达式过滤以下字符串:C# 以字符串开头的正则表达式,c#,regex,C#,Regex,我想用正则表达式过滤以下字符串: TEST^AB^^HOUSE-1234~STR2255 我只想得到字符串“HOUSE-1234”,我必须始终以“test^AB^^”开头,以“~”结尾来测试字符串 你能告诉我正则表达式应该是什么样子吗?你应该在没有正则表达式的情况下执行此操作: string pattern=@"\^\^(.*)\~"; Regex re=new Regex(pattern); var str = "TEST^AB^^HOUSE-1234~STR2255";
TEST^AB^^HOUSE-1234~STR2255
我只想得到字符串“HOUSE-1234”
,我必须始终以“test^AB^^”
开头,以“~”
结尾来测试字符串
你能告诉我正则表达式应该是什么样子吗?你应该在没有正则表达式的情况下执行此操作:
string pattern=@"\^\^(.*)\~";
Regex re=new Regex(pattern);
var str = "TEST^AB^^HOUSE-1234~STR2255";
var result = (str.StartsWith("TEST^AB^^") && str.IndexOf('~') > -1)
? new string(str.Skip(9).TakeWhile(c=>c!='~').ToArray())
: null;
Console.WriteLine(result);
您给我们的信息很少(并且假设
TEST^AB
不一定是常数),这可能会起作用:
(?:\^\^).*(?:~)
看
或者如果TEST^AB
是常量,您也可以将其加入
(?:TEST\^AB\^\^).*(?:~)
重要的一点是要记住,您需要转义^
您可以使用\^(.*?)\
模式,该模式以^
开头,以~
结尾
string s = @"TEST^AB^^HOUSE-1234~STR2255";
Match match = Regex.Match(s, @"\^\^(.*?)\~", RegexOptions.IgnoreCase);
if (match.Success)
{
string key = match.Groups[1].Value;
Console.WriteLine(key);
}
输出将是
HOUSE-1234
这是一个。string input=“TEST^AB^^HOUSE-1234~str225”;
var matches=Regex.matches(输入@“TEST^AB^^(.+?)~”).Cast()
.Select(m=>m.Groups[1]。值)
.ToList();
对于定义良好的内容,甚至不需要正则表达式。如果要简化:
string[] splitString;
if (yourstring.StartsWith("TEST^AB^^"))
{
yourstring = yourstring.Remove(0, 9);
splitString = yourstring.Split('~');
return splitString[0];
}
return null;
(测试“^AB^^”)((\w)+-(\w+)(\~.+)
分为三组:
(TEST\^AB\^\^) : match yours TEST^AB^^
((\w)+\-(\w+)) : match yours HOUSE-123
(\~.+) : match the rest
您想提取“TEST^AB^”和“~”之间的字符串?您需要更明确地定义问题。可能有一半的正则表达式问题是因为人们没有充分考虑模式应该是什么。@Matt,还有一半的正则表达式问题可以在没有正则表达式的情况下得到解决@艾哈迈德克雷姆:是的,这正是我所需要的。@RaffaelVögeli:所以它总是以TEST^AB^
开头,还是总是以一些文本开头,后跟^
。这就是为什么准确定义问题很重要的原因。
(TEST\^AB\^\^) : match yours TEST^AB^^
((\w)+\-(\w+)) : match yours HOUSE-123
(\~.+) : match the rest