2016-07-18 17 views
2

を繰り返す:正規表現 - 私のようなフラグメント持っキャプチャ

<meta property="size" content="38R|38L|44R|36R|44L|42R|42L|40S|40R|40L|38S" /> 

をそして、私は戻りたい:38R38L44R ...別の試合のように/私は少しこだわっている

をキャプチャ - 私は億の事を試してみましたが、繰り返し「+」男が答えかもしれ感じていた:最も高く評価

<meta property="size" content="((.*?)\|)+

すべてのヘルプ。

値を抽出coideは次のようになります。

var values = match 
    .Cast<Match>() 
    .Select(m => m.Groups[1].Value) 
    .ToList(); 

私はそれを変更することはできません - この場合には正規表現を使用する必要があります。以下Wiktor第から

この正規表現は、トリックをしました!

(?:<meta\s+property="size"\s+content="|(?!^)\G\|?)(\w+) 
+0

あなただけの 'XElement.Parse'と' content'属性値を解析することはできますか?そして、 '|'で分割します。 –

+0

これはC#と何が関係していますか?それは、C#の正規表現エンジンを使用しています.... ' –

+1

人々は、このために正規表現を使用しないことを教えてくれますし、あなたは'プロパティは=「コンテンツ= ABCDEFG」コンテンツ= "38Rのようなファンキーなものを得るかもしれないためです悲しいことRexexを使用する必要があり、あなたは* CaptureCollectionへのアクセスを持っていないことを意味、私は –

答えて

2

本当に正規表現なしで値を取得できます。 System.Xml.Linq名前空間を追加すると、このような文字列の内容を解析することができます。

var input = "<meta property=\"size\" content=\"38R|38L|44R|36R|44L|42R|42L|40S|40R|40L|38S\" />"; 
var xml = XElement.Parse(string.Format("<root>{0}</root>", input)); 
var content = xml.Elements("meta") 
     .Select(c => c.Attribute("content").Value).FirstOrDefault(); 
var res = content.Split('|'); 

enter image description here

場合 - 万が一 - そのソリューションは、あなたのために働いていない、フォールバック正規表現ソリューションは

することができ \w+(1以上WOこと IDEONE demo

メモを見る

var input = "<meta property=\"size\" content=\"38R|38L|44R|36R|44L|42R|42L|40S|40R|40L|38S\" />"; 
var result = Regex.Matches(input, @"(?:<meta\s+property=""size""\s+content=""|(?!^)\G\|?)(\w+)") 
    .Cast<Match>() 
    .Select(p => p.Groups[1].Value) 
    .ToList(); 
foreach (var s in result) 
    Console.WriteLine(s); 

rd chars)を[^|"]+に置き換えることができます。

+0

I |を –

+0

んに取り組んでいるシステムへの入力は、*あなたが 'にアクセスする必要がありますか?|?別の試合のように'区切られた文字列を[お試しください'(?:

+0

いいえ:( これはマッチ VAR値=一致 \t .Cast () \t .Select(M => m.Groups [1] .Valueの)を \t .ToList()を取得するコードであります; –

関連する問題