正则表达式以字符串开头

时间:2013-05-21 12:28:15

标签: c# regex

我想用正则表达式过滤以下字符串:

TEST^AB^^HOUSE-1234~STR2255

我只想获得字符串"HOUSE-1234",我总是用开头"TEST^AB^^"测试字符串,然后用"~"结束。

你能帮我解决一下正则表达式的样子吗?

7 个答案:

答案 0 :(得分:2)

您可以使用与\^\^(.*?)\~匹配并以^^

结尾的~模式
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

答案 1 :(得分:1)

string input = "TEST^AB^^HOUSE-1234~STR2255";
var matches = Regex.Matches(input, @"TEST\^AB\^\^(.+?)~").Cast<Match>()
                .Select(m => m.Groups[1].Value)
                .ToList();

答案 2 :(得分:0)

string pattern=@"\^\^(.*)\~";
Regex re=new Regex(pattern);

答案 3 :(得分:0)

你应该在没有正则表达式的情况下这样做:

    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);

答案 4 :(得分:0)

根据您提供给我们的少量信息(假设TEST^AB不一定是常数),这可能会有效:

(?:\^\^).*(?:~)

请参阅here

或者如果TEST^AB是常量,你也可以把它扔掉

(?:TEST\^AB\^\^).*(?:~)

重要的是要记住你需要逃避^

答案 5 :(得分:0)

甚至不需要RegEx来定义明确的东西。如果你想简化:

string[] splitString;
if (yourstring.StartsWith("TEST^AB^^"))
{
    yourstring = yourstring.Remove(0, 9);
    splitString = yourstring.Split('~');
    return splitString[0];
}
return null;

答案 6 :(得分:0)

(TEST \ ^ AB \ ^ \ ^)((\ w)+ - (\ w +))(\〜。+)

有三组:

(TEST\^AB\^\^) : match yours TEST^AB^^
((\w)+\-(\w+)) : match yours HOUSE-123
(\~.+) : match the rest