2013-10-04 3 views
1

다소 이상한 정규식 대체를 수행해야합니다. 나는 그걸 제대로 풀어 봤지만,별로는 안된다.정규식 일치가 너무 많은 문자 하나와 일치합니다.

내가 문자열이 광장에 둘러싸여 제거 할 문자열에서 여러 문자열을 제거하는 데 필요한 대괄호는이 해시 태그 []##가옵니다 제외 []중괄호. 예를 들어

는 원래 문자열 인 경우 :

지금까지
This is a test [I]## of the emergency broadcast system. [28]##xyz 

, 나는 몇 가지를 시도했지만 :

[phase]This is []a test [I]## of the emergency broadcast system. [28]##[test]xyz 

그런 다음 대체 정규식 후 예상되는 출력 될 것이다 가장 가까운 정규식 패턴 문자열은 "\[[^\]]*\][^##]"입니다. 이 문제는 캐릭터가 하나 이상의 캐릭터와 일치해야한다는 것입니다. 예, 위의 테스트 문자열을 사용하고, 정규식을하고 들어 빈 문자열로 교체, 그것은 반환 정규식 패턴 문자열이있는 나는 무엇을 찾고 있어요된다

his is test [I]## of the emergency broadcast system. [28]##yz 

?

답변

1

귀하의 문제는 귀하의 추가 부분이다

[^##] 

하지 # 문자입니다 다음 문자와 일치합니다 :

둘째, 이런 식으로 교체하려고합니다.

\[[^\]]*\](?!##) 
+0

Adrian 감사합니다! 그건 내 시험을 통과하고 정확하게 내가 찾고있는 것입니다. 나는 앞으로의 부정적인 시각을 가지고 실험했지만 분명히 올바르게하지 못했습니다. – STLDeveloper

+0

도와 드리겠습니다. :) –

+0

@STLDeveloper는'[28] ## [test]'문자열을 전달하여'[28] ##'로 만드나요? – AgentFire

0

"\[[^\]]*\][^##]""(\[[^\]]*\])(([^#]{2})?)"으로 바꿉니다.

먼저 [^##]은 ""규칙을 따르지 않으며 대괄호 뒤에 두 개의 해시 태그 [] ## "이 표시됩니다. 따라서 두 개의 비 sharpsigh 문자로 변경해야합니다. ,

var s= Regex.Replace(input, pattern, "$2"); 
+0

미안하지만, 내 테스트 문자열에 대해 내가'얻을 실행할 때 "입니다 비상 방송 시스템의 테스트 [I]는 ##입니다 [28] ## Z를."': 당신은 negative lookahead이 필요합니다. 실제로 너무 많은 문자 대신에 두 개의 문자를 사용합니다. – STLDeveloper

+0

@ SteLDeveloper 이것은 캡처 된 그룹 만 바꾸는 대신 전체 정규 표현식을 대체하기 때문입니다. – AgentFire

+0

My regex replace 문은 다음과 같이 보입니다.'string s = Regex.Replace (input, pattern);'나는 당신의 지시를 따라 내 패턴을 당신이 제안한 것으로 바꿨고 위에서 보여준 결과물을 얻었습니다. – STLDeveloper

관련 문제