我正在使用需要清理的数据集。我希望用em-dash代码(—
)替换问号(?)。这是一个示例字符串:
“......把它关了?服用了几个......”
我可以将该实例与此表达式匹配:\ w \?\ w但是,它匹配问号两侧的一个字符。所以替换看起来像这样:
“......在服用几个......之后关闭它—
。”
如何仅在替换问号时匹配模式?
提前致谢, 杰森
答案 0 :(得分:3)
如果它是PHP(我基于你提出的其他问题),那应该这样做:
$str = preg_replace('/(\w)\?(\w)/i', '\\1—\\2', $str);
答案 1 :(得分:3)
如果您使用的语言支持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...
基于PCRE(perl兼容)的正则表达式引擎支持Lookarounds,尽管Ruby不支持lookbehinds。
答案 2 :(得分:2)
如果我们不知道您使用的是哪种技术,很难回答。如果你正在编写一个JS,那就可以了。
inputStr.replace(/(\w)\?(\w)/, '$1—$2');
答案 3 :(得分:2)
使用: / \ B \?\ B /
\ b匹配单词边界,这似乎是你所追求的。