我有一个充满引号的文档,如:"this is a quote"
。其中一些引号有两个连字符的子句,如:"this quote - this one right here - has em dashes"
,有些只有一个连字符,如:"this quote has just one thing - a hyphen"
。
我正在尝试让一些regex
匹配带有两个连字符的所有引号,但不匹配任何带有零或一个连字符的引号,并且不匹配引号之外的任何文本。另外我应该提一下,有些句子中有一个或多个连字符不在引号之外,我也需要忽略它们,并且不要让它们干扰引号中的匹配。我想将正确匹配的引号'双连字符更改为正确的短划线字符。
我尝试使用lookaheads
并否定了字符,但似乎无法弄清楚这一点。
这是regex
可以做的事情,还是我需要提出某种其他方法(比如将所有文本拆分成数组并单步执行,进行更改然后重新组合所有文本在末尾)?我可以做到这一点,如果有一个单线正则表达式声明可以做我想做的事情,它似乎只是浪费时间。
答案 0 :(得分:1)
在引号的开头添加\b
字边界,并检查引号内的最后一个字符是字母或数字还是某种标点符号。
("\b[^-"]*-[^-"]*-[^-"]*[\w.!?]")
答案 1 :(得分:0)
"(?:[^-"]*-){2}[^-"]*"
是关于仅使用正则表达式获得的最佳效果,但如果引号之外有两个连字符,则它不起作用。将文本拆分为数组可能是您想要的最佳方式。