これを含む文字列があります:
@[User::RootPath]+"Dim_MyPackage10.dtsx"
[User::RootPath]
正規表現を使用してその部分を抽出する必要があります。これまでのところ、私はこの正規表現を持っています:[a-zA-Z0-9]*\.dtsxしかし、さらに先に進む方法がわかりません。
変数については、セット以外のすべてを抽出するためにnot セット を使用して、必要なものを消費してみませんか?[^ ]
^
中かっこ内の は、一致しないものを見つけることを意味します。たとえば、a または引用符 ( ) ではないものをすべて探し]
ます"
。
次に、実際の一致を名前付きキャプチャ グループに配置し(?<{NameHere}> )
、それに応じて抽出できます。
string pattern = @"(?:@\[)(?<Path>[^\]]+)(?:\]\+\"")(?<File>[^\""]+)(?:"")";
// Pattern is (?:@\[)(?<Path>[^\]]+)(?:\]\+\")(?<File>[^\"]+)(?:")
// w/o the "'s escapes for the C# parser
string text = @"@[User::RootPath]+""Dim_MyPackage10.dtsx""";
var result = Regex.Match(text, pattern);
Console.WriteLine ("Path: {0}{1}File: {2}",
result.Groups["Path"].Value,
Environment.NewLine,
result.Groups["File"].Value
);
/* Outputs
Path: User::RootPath
File: Dim_MyPackage10.dtsx
*/
(?: )
これは、これらをパターンのデファクト アンカーとして使用し、マッチ キャプチャ グループに配置しないためです。
回答とコメント、そしてこれまでに「受け入れられた」ものがないという事実から、質問/問題が完全に明確ではないように思えます。'SomeVariable' のみが変数である [User::SomeVariable] パターンを探している場合は、次のことを試してください。
\[User::\w+]
完全な表現をキャプチャします。さらに、そのパターンを検出したいが、「SomeVariable」部分だけが必要な場合は、次を試してください。
(?<=\[User::)\w+(?=])
これはルックアラウンドを使用します。
正規表現は、任意の数の英数字の後に.dtsx
. あなたの例では、一致しMyPackage10.dtsx
ます。
一致させたい場合Dim_MyPackage10.dtsx
は、正規表現で許可されている文字のリストにアンダースコアを追加する必要があります。[a-zA-Z0-9]*.dtsx
に一致させたい場合は[User::RootPath]
、最後で停止する正規表現が必要です/
(または\
は、パスで使用するスラッシュの種類によって異なります): 次のようなもの: .*\/
(または.*\\
)
ここだ兄貴
using System;
using System.Text.RegularExpressions;
namespace myapp
{
class Class1
{
static void Main(string[] args)
{
String sourcestring = "source string to match with pattern";
Regex re = new Regex(@"\[\S+\]");
MatchCollection mc = re.Matches(sourcestring);
int mIdx=0;
foreach (Match m in mc)
{
for (int gIdx = 0; gIdx < m.Groups.Count; gIdx++)
{
Console.WriteLine("[{0}][{1}] = {2}", mIdx, re.GetGroupNames()[gIdx], m.Groups[gIdx].Value);
}
mIdx++;
}
}
}
}