我正在處理需要清理的數據集。我正在用em-dash代碼(—
)替換問號(?)。下面是一個例子字符串:如何使用RegEx匹配和替換單詞字符之間的非單詞字符?
「......關閉它以一對夫婦的後...?」
我可以匹配實例與此表達:?\ W \ \ W然而,它匹配問號兩邊的一個字符。因此,更換這個樣子的:
「......關閉它道瓊斯—
採取一對夫婦後......」
我怎能模式匹配,而僅僅更換問號?
在此先感謝,傑森
我正在處理需要清理的數據集。我正在用em-dash代碼(—
)替換問號(?)。下面是一個例子字符串:如何使用RegEx匹配和替換單詞字符之間的非單詞字符?
「......關閉它以一對夫婦的後...?」
我可以匹配實例與此表達:?\ W \ \ W然而,它匹配問號兩邊的一個字符。因此,更換這個樣子的:
「......關閉它道瓊斯—
採取一對夫婦後......」
我怎能模式匹配,而僅僅更換問號?
在此先感謝,傑森
如果是PHP(我基礎上,你問其他問題),這應該這樣做:如果我們不
$str = preg_replace('/(\w)\?(\w)/i', '\\1—\\2', $str);
很難回答不知道你在使用哪種技術。如果你正在寫一個JS這將做到這
inputStr.replace(/(\w)\?(\w)/, '$1—$2');
如果您正在使用支持lookarounds的語言,你可以用它們來確保您的問號是由單詞字符包圍,但實際上沒有捕獲它們:
/(?<=\w)\?(?=\w)/
的(?<=\w)
是回顧後(該引擎查找「後面」 - 前 - 一個潛在的匹配)和(?=\w)
是一個超前(發動機展望)。周圍沒有被捕獲,所以在你的情況下,只有問號將是,然後你可以取代它。
在PHP中,例如,你可以這樣做:
$string = "...shut it down?after taking a couple of..."
preg_replace('/(?<=\w)\?(?=\w)/', "—", $string);
// results in ...shut it down—after taking a couple of...
Lookarounds是基於PCRE-(Perl兼容)的正則表達式引擎的支持,雖然紅寶石不支持lookbehinds。
這和肖恩布萊特的模式一樣。 Php支持lookarounds,我會嘗試以其他模式實現這個方法,我將很快匹配它。 – JasonBartholme 2009-08-05 18:24:02
用途: /\ B \ \ B/
\乙字邊界,這似乎是你追求的匹配?
是的,這個特殊的實例,我在PHP中工作,並完美匹配!謝謝! – JasonBartholme 2009-08-05 18:20:48