我想用正则表达式过滤以下字符串:
TEST^AB^^HOUSE-1234~STR2255
我只想得到字符串"HOUSE-1234"
,我必须始终以开头"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
这是一个DEMO
.
string input = "TEST^AB^^HOUSE-1234~STR2255";
var matches = Regex.Matches(input, @"TEST\^AB\^\^(.+?)~").Cast<Match>()
.Select(m => m.Groups[1].Value)
.ToList();
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\^\^).*(?:~)
重要的是要记住,你需要逃避^
定义明确的东西甚至不需要 RegEx。如果要简化:
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