我正在处理需要清理的数据集。我正在用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