Вставка тире в ISBN с помощью grep (в BBEdit)

У меня есть файл, в котором действительные ISBN всегда появляются в контексте

isbn = {<ISBN>}

но часто отсутствуют дефисы, которые обычно используются для их форматирования. Я хотел бы вставить эти дефисы с помощью grep в BBEdit. Например, я хотел бы заменить

isbn = {0226104036}

с

isbn = {0-226-10403-6}

но для этого мне нужно разбить строку цифр, что требует знания кодировки ISBN и навыков grep, которых у меня нет.

я дохожу до поиска

isbn = {([0-5]|7|60[0-9]|61[0-7]|8[0-9]|9[1-4]|9[5-8][0-9]|992[7-9]|99[3-8][0-9]|9990[1-9]|999[1-5][1-9]|9996[1-7])([0-9]+)([0-9]|X)}

и заменить на

isbn = {\1-\2-\3}

который в приведенном выше примере доводит меня только до

isbn = {0-22610403-6}

и в некоторых случаях может даже поставить первый тире не в том месте.

Обратите внимание, что я могу предположить, что все ISBN — это ISBN-10. Также обратите внимание, что я делаю это в BBEdit, который имеет некоторые особенности синтаксиса grep. связанные решения, которые я нашел здесь, либо не работают в BBEdit, либо я не могу адаптировать их к этому конкретному сценарию.


person orome    schedule 27.03.2012    source источник
comment
Что происходит, когда вы используете текущее регулярное выражение? Можете ли вы привести несколько примеров удачных/неудачных результатов?   -  person octern    schedule 28.03.2012
comment
@octern: это всегда работает, но (1) я не уверен, что он правильно анализирует первый шаблон (группу) (т. е. моя упрощенная интерпретация спецификации ISBN-10 может съедать некоторые цифры в первом шаблоне, которые действительно принадлежат во втором) и (2) второй шаблон должен быть разделен на два (издатель и название).   -  person orome    schedule 28.03.2012


Ответы (1)


Одна вещь, которую я сразу вижу, это то, что { и } являются специальными символами в регулярном выражении, поэтому вам нужно их экранировать (поставить обратную косую черту перед символом). Это относится только к тексту в поиске, а не в замене. Это может быть не единственной причиной вашей проблемы, но, вероятно, это необходимо.

Кроме того, вы пробовали искать в Интернете «регулярные выражения ISBN»? Для распространенных шаблонов, подобных этому, обычно уже существует известное и проверенное решение. Вот что может помочь. У меня нет знаний, чтобы проверить это самостоятельно, но если это не сработает, есть много других предлагаемых решений.

person octern    schedule 27.03.2012
comment
Приведенные выше шаблоны работают в BBEdit. Я знаю о ресурсе, на который вы ссылаетесь (он связан в вопросе, который я упомянул), это то, что я имел в виду как не работающее в BBEdit, это также более сложно, чем мне нужно, и я не уверен, как его адаптировать (это предполагает другой контекст, например 10 или 13 ISBN, и префикс особой формы, отличной от той, что у меня есть). - person orome; 28.03.2012
comment
Тогда я полностью провалился в понимании прочитанного. Прости за это :Р - person octern; 28.03.2012