2017-04-24 11 views
1

こんにちは、私は私が機能していVB.NET で正規表現によるファイル内のすべての一致式を検索しようとしている:正規表現

Dim written As MatchCollection = Regex.Matches(ToTreat, "\bGlobalIndexImage = \'(?![0-9])([A-Za-z])\w+\'") 
For Each writ As Match In written 
    For Each w As Capture In writ.Captures 
     MsgBox(w.Value.ToString) 
    Next 
Next 

を私は今、この正規表現を持っている:

\bGlobalIndexImage = \'(?![0-9])([A-Za-z])\w+\' 

私はこのフォームの下にすべてのオカレンスに一致するようにしようとしている:

GlobalIndexImage = 'images' 
GlobalIndexImage = 'Search' 

しかし、私はまた、VAを取得私は一致する必要はありません。このような梅毒:

GlobalIndexImage = 'Z0003_S16G2' 

だから私は、それは数字が含まれている場合は、単純に試合を除外するために、私の正規表現に望んでいました。

答えて

3

\w速記文字クラスは、文字_と一致します。あなたは文字だけが必要な場合は、単に[a-zA-Z]を使用します。

"\bGlobalIndexImage = '([A-Za-z]+)'" 

regex demoを参照してください。

詳細

  • \b - 大手ワード境界
  • GlobalIndexImage = ' - リテラル文字
  • ([A-Za-z]+)の文字列 - ASCII文字(原因+数量詞に)一つ以上のキャプチャグループ1
  • ' - 一重引用符。

enter image description here

あなたが任意のUnicode文字を一致させる必要がある場合は、\p{L}[a-zA-Z]を交換してください。

VB.NET:

Dim text = "GlobalIndexImage = 'images' GlobalIndexImage = 'Search'" 
Dim pattern As String = "\bGlobalIndexImage = '([A-Za-z]+)'" 
Dim matches As List(Of String) = Regex.Matches(text, pattern) _ 
            .Cast(Of Match)() _ 
            .Select(Function(m) m.Groups(1).Value) _ 
            .ToList() 
Console.WriteLine(String.Join(vbLf, matches)) 

出力:

enter image description here

+0

ありがとうございます。同じ機会にあなたの写真に$ 1を表示させるvb.netの簡単な方法があるかどうかを知っていますか? – Mederic

+0

あなたはLinqのアプローチを好んでいますか? –

+0

私は単に文字列を** '**に分割することができますかどうかは気にしませんが、既にそれを行う方法があります。 – Mederic

0

だからあなたの正規表現は

\bGlobalIndexImage = \'\d+\' 
ようになります番号の使用はありません、すべて \D

をキャッチします

しかし、これには空白の単語も含まれます。文字のみを使用するには[a-zA-Z]

\bGlobalIndexImage = \'[a-zA-Z]+\'