2016-07-18 2 views
2

을 반복 :정규식 - 내가 좋아하는 조각이 캡처

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

을 그리고 반환 할 : 별도의 일치 /가

을 캡처로 난 조금 붙어 ... 38R, 38L, 44R - 나는 억 가지를 시도했지만 반복되는 '+'사람이 해답이 될 수 있습니다 느꼈다 대부분의 평가

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

어떤 도움.

값을 추출 coide은 다음과 같습니다

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

나는 변경할 수 없습니다 -이 경우 정규식을 사용합니다.

아래 위키에서이 정규 표현식은 트릭을 완성했습니다!

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

'content' 속성 값을'XElement.Parse'로 파싱 할 수 있습니까? 그렇다면'| '로 분리했을 것입니다. –

+0

이것은 C#과 어떤 관련이 있습니까? –

+1

사람들은 당신이 이것을 위해 정규식을 사용하지 말라고 말할 것입니다. 왜냐하면'property = "content ="abcdefg "content ="38R | .... "와 같은 펑키 한 것들을 얻을 수 있기 때문입니다. –

답변

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

- 혹시 - 그 해결책은 당신을 위해 작동하지 않는 경우, 대체 정규식 솔루션

될 수 있습니다
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); 

IDEONE demo

주를 참조 그 \w+ (1 호 이상 문자)는 [^|"]+으로 바꿀 수 있습니다.

+0

슬프게도 Rexex를 사용해야한다. 내가 작업하고있는 시스템에 대한 입력이다. –

+0

* CaptureCollection *에 대한 액세스 권한이 없다는 것을 의미합니까? 분리 된 문자열을'|'분리 된 문자열에 액세스해야합니까? [[ '(? :

+0

아니 :( 이 인 일치를 VAR 값을 얻는다 코드 = 매치 \t .Cast () \t ALL 기타 사항 서보 -OFF (m => m.Groups [1] .Value) \t .ToList() ; –