我正在尝试使用正则表达式来删除单词中的“-”字符。
我知道如何通过[A-z]-[A-z]
来找到它们,但是我如何仅去除'-'?
更详细地讲,我使用Calibre将PDF转换为EPUB,它的工作比我预期的要好得多,现在的问题是,页面之间打断的单词带有令人讨厌的'-'。
谢谢
答案 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'
仅当破折号出现在两个单词字符(由正则表达式定义)旁边时,才会替换破折号。