正则表达式仅替换引号内的双连字符


Regex replace only double hyphens inside quotations

我有一个充满引号的文档,就像:"this is a quote" .其中一些引号在两个连字符中都有子句,例如:"this quote - this one right here - has em dashes",有些只有一个连字符,例如:"this quote has just one thing - a hyphen"

我正在尝试使用两个连字符匹配所有引号,但不匹配任何带有零个或一个连字符的引号,并且不匹配引号外的任何文本的regex。我还应该提到,有些句子带有一个或多个连字符位于引号之外,我也需要忽略它们,不要让它们干扰我在引号中的匹配。我想将正确匹配的引号的双连字符更改为正确的长破折号字符。

我尝试使用lookaheads和否定字符,但似乎无法弄清楚这一点。

这是regex可以做的事情,还是我需要想出某种其他方法(例如将所有文本拆分为一个数组并逐步执行它,进行更改,然后在最后重新组合所有内容(?我可以这样做,相反,如果有一个单行正则表达式语句可以做我想要的,这似乎只是愚蠢的浪费时间。

在引号的开头添加'b字边界,并检查引号内的最后一个字符是字母、数字还是某种标点符号。

("'b[^-"]*-[^-"]*-[^-"]*['w.!?]")

> "(?:[^-"]*-){2}[^-"]*" 是仅使用正则表达式可以获得的最好的,但如果引号外有两个连字符,则不起作用。将文本拆分为数组可能是执行所需操作的最佳方法。