2009-08-05 61 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/

\乙字边界,这似乎是你追求的匹配?

相关问题