2012-03-27 25 views
0

我在其中有效的ISBN總是出現在插入用grep中的ISBN破折號(在BBEdit中)

isbn = {<ISBN>} 

上下文中的文件通常缺乏一般用於格式化他們破折號。我想在BBEdit中使用grep插入這些破折號。比如我想替換

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} 

甚至可能在某些情況下將第一個破折號放在錯誤的地方。

請注意,我可以假設ISBNs都是ISBN-10。另外請注意,我在BBEdit中做了這個,它有一些grep syntax quirks。我在這裏找到的related solutions要麼在BBEdit中失敗,要麼我無法使它們適應這種特殊情況。

+0

當你使用你當前的正則表達式會發生什麼?你能舉出一些成功/不成功的例子嗎? – octern 2012-03-27 21:04:53

+0

@octern:它總是有效,但是(1)我不確定它是否正確地解析出第一個模式(「組」)(即我對ISBN-10規範的簡單解釋可能是以第一種模式吃掉一些數字(2)第二種模式應該分爲兩種(「發佈者」和「標題」)。 – orome 2012-03-27 21:21:36

回答

0

我剛纔看到的一件事是{和}是正則表達式中的特殊字符,所以您需要將它們轉義(在字符前放置一個反斜槓)。這僅適用於搜索中的文本,而不適用於替換。這可能不是你的問題的唯一原因,但它可能是必要的。

此外,您是否嘗試過搜索「ISBN正則表達式」?對於像這樣的常見模式,通常已經有一個已知和已驗證的解決方案。 Here's one that might help。我沒有知識來自己檢查,但如果這不起作用,那裏有很多其他建議的解決方案。

+0

我上面的模式在BBEdit中工作。我知道你鏈接的資源(它與我提到的問題有關),這就是我所指的不在BBEdit中工作,它比我需要更復雜,我不知道如何適應它(它假定不同的上下文,例如10或13個ISBN,以及特定形式的前綴,與我所具有的不同)。 – orome 2012-03-27 21:18:16

+0

然後,我完全沒有閱讀理解。對不起:P – octern 2012-03-27 21:21:56