2009-08-05 4 views
0

스크럽해야하는 데이터 세트로 작업하고 있습니다. 물음표 (?)를 em 대시 코드 (—)로 바꾸려고합니다.단어 문자 사이의 단어가 아닌 문자를 RegEx로 바꾸려면 어떻게합니까?

? "몇 복용 후 종료 ..."

나는이 표현에 해당 인스턴스를 일치시킬 수 있습니다 : 예를 들면 다음과 같습니다 문자열은 그러나 승, 그것은 일치 \ \ w \? 물음표의 양쪽에 한 문자. 그래서 다음과 같다 교체 :

을 "... 몇 복용 후 다우 —을 종료 ..."에만 물음표를 교체하는 동안 난 그냥 패턴과 일치 수있는 방법

를? 사전에

감사합니다, 제이슨

답변

3

가 PHP 인 경우 (난 당신이 질문 한 다른 질문에 그것을 내놓고있어),이 그것을 수행해야합니다

하드
$str = preg_replace('/(\w)\?(\w)/i', '\\1—\\2', $str); 
+0

예,이 특정 인스턴스는 PHP로 작업하고 있었고 그 일치는 완벽하게 작동합니다! 감사! – JasonBartholme

2

대답을 우리 돈 경우 어떤 기술을 사용하고 있는지 알지 못합니다. 당신이 JS를 작성하는 경우 지원 lookarounds를 사용하는 언어가, 당신이 당신의 물음표는 단어 문자로 둘러싸여 있는지 확인하는 데 사용할 수 있다면이 그것을

inputStr.replace(/(\w)\?(\w)/, '$1—$2'); 
3

을 할 것입니다,하지만 실제로 그들을 캡처 :

/(?<=\w)\?(?=\w)/ 

(?<=\w)은 보이는 것입니다 (엔진이 잠재적으로 일치하기 전에 "뒤"모양으로 표시됩니다). (?=\w)은 미리보기입니다 (엔진이 앞을 보입니다). Lookaround는 캡처되지 않으므로, 물음표 만 나타납니다. 그러면 대체 할 수 있습니다.

PHP에서, 예를 들어, 당신은 이렇게 할 수있는 :

$string = "...shut it down?after taking a couple of..." 
preg_replace('/(?<=\w)\?(?=\w)/', "&mdash;", $string); 
// results in ...shut it down&mdash;after taking a couple of... 

Lookarounds

은 PCRE 기반 (펄 호환) 정규식 엔진에서 지원하는, 루비 lookbehinds을 지원하지 않지만.

+0

이것은 Sean Bright의 패턴처럼 잘 작동합니다. PHP는 lookarounds를 지원하고 나는이 패턴을 곧 다른 패턴으로 구현하려고 노력할 것이다. – JasonBartholme

2

사용 : /\ B \ \ B/

b는 당신이 계신 것 같다 단어 경계와 일치 \?.

관련 문제