2014-02-19 2 views
1

정규식에 약간 문제가 있습니다. 나는이 다음 문자열 패턴regex에서 특정 패턴을 제외하는 방법은 무엇입니까?

  1. "에밀리 왓슨 (드 Abril 1897-)"
  2. "EMAA 윌리엄 (캘리포니아)".

나는 2 문자열에서 첫 번째 문자열 "EMAA 윌리엄 (캘리포니아)"전체 문자열에서만 "에밀리 왓슨"를 추출해야 정규식을 작성해야합니다.

기본적으로 내 정규식은 "month de year"패턴의 경우 중괄호와 함께 텍스트를 생략해야합니다. 지금까지 내가 2 문자열을 잘 작동 위의 정규식에서

(?'NAME'[\w]+\s*[\w]+\s*\([\w]+(?![\w]+\s*de\s*\d{4}-)\)) 

을 시도 즉, " EMAA 윌리엄 (캘리포니아)" 있지만 (제 1 문자열 "에밀리 왓슨 작동하지 이야 드 Abril 1897-) " .

"Emily Watson (abril de 1897-)"의 경우 이름이 없습니다. 즉 Emily Watson입니다.

내 문제의 첫 번째 문자열을 제외하는 방법에 대해 도와주십시오.

+0

하시기 바랍니다 반환 –

답변

2

이 하나 시도 되세요. 태그는 이러한 용도로 사용됩니다.
+0

고맙습니다. D – Muralikrishna

+0

@Muralikrishna : 환영합니다. 자유롭게 대답을 upvote;) – Toto

1

네가티브 lookahead를 일치시켜야합니다.

(?'NAME'[\w]+\s*[\w]+\s*\((?![\w]+\s*de\s*\d{4}-)[\w]+\)) 

이 방법을 먼저 확인하고 괄호 사이에 month de year 패턴이 존재하지 않는 경우, 그리고 무엇 괄호 사이이며, 버전이 먼저 마지막 괄호까지 모든 것을 일치하는 동안 및 매칭 다음 왼쪽 비트에 month de year이 없는지 확인하십시오. 그것없이 이해가되지하지 않는 한 질문 제목에 사용되는 언어에 대한 정보를 포함하지 않는,

(?<NAME>.+\s\(\w+\)|.+\s(?=\(\w+\sde\s\d{4}-\))) 

그것은

Emily Watson 
Emaa William (california) 
+0

안녕하세요, 답변 해 주셔서 감사합니다. 그러나 교환이 작동하지 않아도 이전과 같은 출력을 얻고 있습니다 – Muralikrishna

관련 문제