我有一个充满引号的文档,就像:"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}[^-"]*"
是仅使用正则表达式可以获得的最好的,但如果引号外有两个连字符,则不起作用。将文本拆分为数组可能是执行所需操作的最佳方法。