문제
나는 괜찮은 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%
롭