正则表达式删除字符之间的“-”

时间:2020-02-08 20:07:21

标签: regex calibre

我正在尝试使用正则表达式来删除单词中的“-”字符。 我知道如何通过[A-z]-[A-z]来找到它们,但是我如何仅去除'-'? 更详细地讲,我使用Calibre将PDF转换为EPUB,它的工作比我预期的要好得多,现在的问题是,页面之间打断的单词带有令人讨厌的'-'。

谢谢

2 个答案:

答案 0 :(得分:0)

/(?<=\p{L})-(?=\p{L})/(或/(?<=[[:alpha:]])-(?=[[:alpha:]])/)将匹配两个Unicode大写或小写字母之间的连字符。 (?<=\p{L})正向后看(?<\p{L})正向超前。对于英文文本,您也可以写/(?<=[a-z])-(?=[1-z])/,只要其中一个不写"She was blas-é about it"

在Ruby中,

"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"

答案 1 :(得分:-1)

正则表达式本身不会处理替换项,只会识别匹配项。 regex的实现是语言的实现,它可以进行替换。

在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'

仅当破折号出现在两个单词字符(由正则表达式定义)旁边时,才会替换破折号。

相关问题