문제

나는 괜찮은 regex를 얻었지만 어떤 상황에서는 그것이 잘 작동하지 않습니다.

메시지 미리보기 원인 메시지 편집기 ""로 까다로운 일을하십시오.

[\[]?[\^%#\$\*@\-;].*?[\^%#\$\*@\-;][\]]

그 임무는 일반적으로 그런 것처럼 보이는 패턴을 찾는 것입니다.

아바

  • a -char from set ^,%,#, $,*,@, -,;
  • B- 일부 텍스트
  • 그리고]는 패턴에 포함됩니다

테스트 문자열 에서이 패턴의 모든 발생을 찾을 것으로 예상됩니다.

Black Fox [#sample1#] [%샘플 2%] - [#sample3#] 블록을 먹습니다.

그러나 예상되는 일치 목록 대신

  • [#샘플 1#]
  • [%샘플 2%]
  • [#sample3#]

나는 이것을 얻었다

  • [#샘플 1#]
  • [%샘플 2%]
  • "- [#sample3#]

그리고이 문제는 "A"세트의 다른 숯들도 발생하는 것 같습니다. 그래서 누군가가 필요에 따라 작동하도록 내 동선의 변경을 제안 할 수 있습니까?

그리고 덜 중요한 것은, 내 동정애를 만드는 방법, 그런 것처럼 보이는 패턴을 배제하는 방법

알파벳

  • a -char from set ^,%,#, $,*,@, -,;
  • B- 일부 텍스트
  • C- 세트 ^,%,#, $,*,@, -,; a 외에
  • 그리고]는 패턴에 포함됩니다

예를 들어

$ sample1#] [%sample2@] [%샘플3;

미리 감사드립니다

MTH

도움이 되었습니까?

해결책

\[([%#$*@;^-]).+?\1\]

텍스트에 적용됨 :

Black fox [#sample1#] [%sample2%] - [#sample3#] [%sample4;] eats blocks.

성냥

  • [#sample1#]
  • [%sample2%]
  • [#sample3#]
  • 하지만 [%sample4;]

편집하다

이것은 나에게 효과가 있습니다 (예상대로 출력, C#에 의해 REGEX가 예상대로 수락) : :

Regex re = new Regex(@"\[([%#$*@;^-]).+?\1\]");
string s = "Black fox [#sample1#] [%sample2%] - [#sample3#] [%sample4;] eats blocks.";

MatchCollection mc = re.Matches(s);
foreach (Match m in mc)
{
  Console.WriteLine(m.Value);
}

다른 팁

왜 첫 번째 "?" 안에 [[]?"

\[[\^%#\$\*@\-;].*?[\^%#\$\*@\-;]\]

다른 줄을 잘 감지 할 것입니다

더 정확하게 :

\[([\^%#\$\*@\-;])([^\]]*?)(?=\1)([\^%#\$\*@\-;])\]

ABA]를 감지 할 것입니다.

\[([\^%#\$\*@\-;])([^\]]*?)(?!\1)([\^%#\$\*@\-;])\]

ABC]를 감지합니다.

오프닝 스퀘어 브래킷의 선택적 일치가 있습니다.

[\]]?

질문의 두 번째 부분은 (그리고 아마도 단순화하려면) 이것을 시도하십시오.

\[\%[^\%]+\%\]|\[\#[^\#]+\#\]|\[\$[^\$]+\$\]

이 경우 가능한 각 구분 기호에 대한 하위 패턴이 있습니다. | 캐릭터는 "또는"이므로 3 개의 서브 표현식 중 하나가 일치하면 일치합니다.

각 하위 표현은 다음과 같습니다.

  • 오프닝 브래킷
  • 특별한 숯
  • 특별한 숯이 아닌 모든 것 (1)
  • 특별한 숯
  • 뒷면을 닫습니다

(1) ''또는 '['와 같은 추가 제외를 추가해야 할 수도 있으므로 다음과 같은 큰 텍스트에 실수로 일치하지 않습니다.

%myvar#] blah blah [$ elsevar%

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top