Регулярное выражение Удалить '-' между символами - PullRequest
0 голосов
/ 08 февраля 2020

Я пытаюсь использовать регулярные выражения, чтобы удалить символ «-», который находится внутри слова. Я знаю, как их найти, просто [A-z]-[A-z], но как мне удалить только '-'? Более подробно, я конвертировал PDF в EPUB, используя Caliber, и он проделал гораздо лучшую работу, чем я ожидал, и теперь проблема заключается в том, что слова, которые разбиваются между страницами, вызывают раздражение '-'.

Спасибо

Ответы [ 2 ]

0 голосов
/ 09 февраля 2020

/(?<=\p{L})-(?=\p{L})/ (или /(?<=[[:alpha:]])-(?=[[:alpha:]])/) будет соответствовать дефису между двумя заглавными или строчными буквами Юникода. (?<=\p{L}) - позитивный взгляд за спиной ; (?<\p{L}) - это позитивный взгляд . Для текста на английском языке sh вы также можете написать /(?<=[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"
0 голосов
/ 08 февраля 2020

Регулярное выражение само по себе не обрабатывает замены, а только идентифицирует совпадения. Это реализация языка регулярных выражений, которая может заменить.

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

Заменяет тире только в том случае, если они появляются рядом с двумя символами слова (как определено регулярным выражением).

...