1

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

TEST^AB^^HOUSE-1234~STR2255

我只想得到字符串"HOUSE-1234",我必须始终以开头"TEST^AB^^"和结尾来测试字符串"~"

你能帮我看看正则表达式应该是什么样子吗?

4

7 回答 7

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.

于 2013-05-21T12:35:47.493 回答
1
string input = "TEST^AB^^HOUSE-1234~STR2255";
var matches = Regex.Matches(input, @"TEST\^AB\^\^(.+?)~").Cast<Match>()
                .Select(m => m.Groups[1].Value)
                .ToList();
于 2013-05-21T12:35:50.977 回答
0
string pattern=@"\^\^(.*)\~";
Regex re=new Regex(pattern);
于 2013-05-21T12:33:29.170 回答
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);
于 2013-05-21T12:34:03.890 回答
0

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

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

这里

或者如果TEST^AB是常数,你也可以把它扔进去

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

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

于 2013-05-21T12:34:51.583 回答
0

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

string[] splitString;
if (yourstring.StartsWith("TEST^AB^^"))
{
    yourstring = yourstring.Remove(0, 9);
    splitString = yourstring.Split('~');
    return splitString[0];
}
return null;
于 2013-05-21T12:38:29.283 回答
0

(测试\^AB\​​^\^)((\w)+-(\w+))(\~.+)

有三组:

(TEST\^AB\^\^) : match yours TEST^AB^^
((\w)+\-(\w+)) : match yours HOUSE-123
(\~.+) : match the rest
于 2013-05-21T12:39:30.650 回答