次の文字列を正規表現でフィルタリングしたい:
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();
あなたが私たちに与えた小さな情報で (そしてTEST^AB
が必ずしも一定ではないと仮定して)、これはうまくいくかもしれません:
(?:\^\^).*(?:~)
こちらをご覧ください
または、TEST^AB
一定の場合は、それを投げることもできます
(?: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);