2017-04-12 1 views
1
String "Ap: SV, Classe Store Stat: AC," 

내가 문자열 합계 후 AC를 잡을 수 있도록 내가 부정적인 lookaround를 사용나는 정규식의 캡처 그룹의 문자열의 일부를 포함하지 않는 방법

(?!Stat:)(\s\D\D), 

을하지만

    캡처
  1. SV,
  2. AC,

난 단지 원하는 그냥 AC를 잡아라. 어떻게해야합니까? 이 정규식에 관해서 나는 "매우 초보자를 해요

~ .NET 정규식에서

+0

['(? <= Stat : \ s) \ D \ D,'] (https://regex101.com/r/SHB3tj/1)을 사용해보십시오. 당신의 정규식은 무엇입니까? BTW,'\ D'는 숫자가 아닌 문자와 일치합니다.'\ D \ D '대신'[a-zA-Z] {2}'가 더 잘할 것입니다. –

+0

효과가있었습니다. 나는 현재 csharp를 사용하고있다. ? <= 의미는 무엇입니까? 내 정규식을 테스트 http://www.regextester.com/ 사용하고 있었지만 기억 나는보고? <=하지만 그 사이트에 대한 작동하지 않았지만 내가 그것을 내 코드에서 그것을 테스트 할 때 효과가. – skinnyWill

+0

감사합니다 wiktor stribizew을 잊어 버렸습니다 – skinnyWill

답변

1

W, 당신은 무한 lookbehind를 사용하거나 당신이 필요로하는 것을 얻을 캡처 할 수 있습니다.

var m = Regex.Match(s, @"\bStat:\s*(\D\D,)"); 
if (m.Success) 
{ 
    Console.WriteLine(m.Groups[1].Value); 
} 

this regex demo를 참조하십시오 .

바로 m.Value에 값을 얻을하려면 lookbehind는 다음과 같이 사용될 수있다 :

var m = Regex.Match(s, @"(?<=\bStat:\s*)\D\D,"); 
if (m.Success) 
{ 
    Console.WriteLine(m.Value); 
} 

regex demo을 참조하십시오.

캡처는 일반적으로보다 효율적이며 다양한 용도로 사용됩니다.

참고 : \b은 단어 경계이므로 Stats을 전체 단어로 사용하지 않으려는 경우 제거하십시오.

관련 문제