2009-08-05 59 views
0

我正在處理需要清理的數據集。我正在用em-dash代碼(—)替換問號(?)。下面是一個例子字符串:如何使用RegEx匹配和替換單詞字符之間的非單詞字符?

「......關閉它以一對夫婦的後...?」

我可以匹配實例與此表達:?\ W \ \ W然而,它匹配問號兩邊的一個字符。因此,更換這個樣子的:

「......關閉它道瓊斯—採取一對夫婦後......」

我怎能模式匹配,而僅僅更換問號?

在此先感謝,傑森

回答

3

如果是PHP(我基礎上,你問其他問題),這應該這樣做:如果我們不

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

是的,這個特殊的實例,我在PHP中工作,並完美匹配!謝謝! – JasonBartholme 2009-08-05 18:20:48

2

很難回答不知道你在使用哪種技術。如果你正在寫一個JS這將做到這

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

如果您正在使用支持lookarounds的語言,你可以用它們來確保您的問號是由單詞字符包圍,但實際上沒有捕獲它們:

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

(?<=\w)是回顧後(該引擎查找「後面」 - 前 - 一個潛在的匹配)和(?=\w)是一個超前(發動機展望)。周圍沒有被捕獲,所以在你的情況下,只有問號將是,然後你可以取代它。

在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-(Perl兼容)的正則表達式引擎的支持,雖然紅寶石不支持lookbehinds。

+0

這和肖恩布萊特的模式一樣。 Php支持lookarounds,我會嘗試以其他模式實現這個方法,我將很快匹配它。 – JasonBartholme 2009-08-05 18:24:02

2

用途: /\ B \ \ B/

\乙字邊界,這似乎是你追求的匹配?

相關問題