2013-08-23 3 views
0

끝 부분이 (& 모든 문자) 예 : 문자열의 모든 일치 항목을 반환하는 정규식을 개발하도록 도와주세요. A = "ABCD (& w) xhz (& d)는 다음 의 2 개의 일치가되어야 하는지를 문자열 A ="ABCD (& w) "는, 다음의 값 (& w) 있어야 일치 : 쉼표 대신 (,)는 [ '' '' '' '......... 임의 구분자리스트 일 수 이상.문자열의 모든 일치 항목을 끝내는 정규식

ABCD (& w) pqrsr, xhz (& d) 만약 그렇다면 이 구분되기 전에 결국하지 않기 때문에 경기 만 (& D)과하지 (& w)를해야

+0

읽을 수없는 게시물 –

답변

2

이런 식으로 뭔가 작업을해야합니다 :

\(&.\)(?=[,:;]|$) 

이 문자는 (& 문자 다음에 임의의 문자 다음에 리터럴 )이옵니다. 또한 다음 문자가 ,, : 또는 ; 중 하나이거나 해당 문자열의 끝에 오는 것이 필요합니다.

+0

(들) 그는 경기에서 마지막 구분 기호를 사용하고 싶지 않으므로 제외시킬 그룹을 추가해야합니다 ('(\ (&. \)) (? = [, :;] | $)') –

+1

@GiulioFranco 구분 기호 ('[, :;]')는 미리보기에 있으므로 일치 항목에 포함되지 않습니다. –

0

그냥 정규식을 작성하십시오. 예를 들어, abcd(&w).*[w]$이고, 여기에는 Regex 101입니다. 이 문자가 두 개 이상 필요하면 abcd(&w), xhz(&d)처럼 정규식은 .*[wd]$이됩니다.

그러나 Regex를 빌드하기 위해 입력으로받은 문자열을 구문 분석해야합니다. 예를 들어, 당신은 뭔가를 할 수 있습니다

var regex = "abcd(&w)".Replace("(&", "[").Replace(")", "]"); 

이틀이 같은 것을 할 수 있습니다

var input = "abcd(&w), xhz(&d)"; 
var exps = input.Split(',', StringSplitOptions.RemoveEmptyEntries); 
var startChars = new List<string>(); 
var endChars = new List<string>(); 

foreach (var ex in exps) 
{ 
    if (ex.Substring(ex.Length - 3, 1) == "&") 
    { 
     startChars.Add(ex.Substring(0, ex.IndexOf("("))); 
     endChars.Add(ex.Substring(ex.IndexOf("&") + 1, 1)); 
    } 
} 

var regex = string.Format("{0}[{1}]$", 
    string.Join("|", startChars.ToArray()), 
    string.Join("", endChars.ToArray())); 

abcd|xhz[wd]$ 같은 정규식을 구축 할 것입니다.