我正在尝试使用正则表达式来删除单词中的“-”字符。我知道如何通过 找到它们,[A-z]-[A-z]
但我如何只删除“-”?更详细地说,我使用 Calibre 将 PDF 转换为 EPUB,它的工作比我预期的要好得多,现在的问题是页面之间中断的单词有这个烦人的“-”。
谢谢
/(?<=\p{L})-(?=\p{L})/
(or /(?<=[[:alpha:]])-(?=[[:alpha:]])/
) 将匹配两个 Unicode 大写或小写字母之间的连字符。(?<=\p{L})
是积极的回顾;(?<\p{L})
是一个积极的前瞻。对于英文文本,你也可以写/(?<=[a-z])-(?=[1-z])/
,只要不写"She was blas-é about it"
。
在红宝石中,
"She- wa-s blas-é about it".gsub(/(?<=\p{L})-(?=\p{L})/, '')
#=> "She- was blasé about it"
"He double-downed--shall we say--on his efforts".
gsub(/(?<=\p{L})-(?=\p{L})/, '')
#=> "He doubledowned--shall we say--on his efforts"
正则表达式本身不会处理替换,只会识别匹配项。正则表达式的语言实现具有替换功能。
在 JavaScript 中,您可以使用 String.replace 和正则表达式捕获组来删除 - 从这样的单词中:
'This is anno-ying. This is also anno-ying'.replace(/(\w)-(\w)/g, function (m, p1, p2) { return p1+p2 })
返回
'This is annoying. This is also annoying'
如果破折号出现在两个单词字符附近(由正则表达式定义),这只会替换破折号。