2017-02-20 19 views
-2

我已经实现了一个应该生成的ruby脚本&将默认代码段插入到正确的位置。问题是这些代码段中的一些必须遵守已有代码的字母顺序。正则表达式按字母顺序将一个单词插入文本

作为一个例子,假设我们需要为字“拇指”一个码片(在这种情况下,将UPDATEFIELD((&(thumb)), ([custominputstream readString]));)插入到下面的代码:

//... 
    UPDATEFIELD((&(answers)), ((ListTO *)[custominputstream readCustomSerializable])); 
    UPDATEFIELD((&(text)), ([custominputstream readString])); 
    UPDATEFIELD((&(title)), ([custominputstream readString])); 
    //... 

的希望的结果是:

//... 
    UPDATEFIELD((&(answers)), ((ListTO *)[custominputstream readCustomSerializable])); 
    UPDATEFIELD((&(text)), ([custominputstream readString])); 
    UPDATEFIELD((&(thumb)), ([custominputstream readString])); //here is the right place to do it. 
    UPDATEFIELD((&(title)), ([custominputstream readString])); 
    //... 

问题是如何找到这个文本插入正确的地方用正则表达式/是否有可能呢?

+0

告诉我们你已经尝试过什么。 – mudasobwa

+0

@mudasobwa我还没有在文档中发现任何与我的问题相关的内容,所以没有任何内容可以显示。 – nrx

+0

编程不是关于docs/SO的复制粘贴解决方案,而是解决问题。 – mudasobwa

回答

0

你的话目前的订单是

answers < text < title 

的来解决这个问题的方法可以读取从顶部的文件,并在该中心打破它。

而你的情况是

UPDATEFIELD((&(text)), ([custominputstream readString]));

阅读

/(?<=UPDATEFIELD\(\(&\()\w+(?=\))/串 这不过是text

,然后用你的话比较。而你的情况正好是thumb

if 'thumb' < 'text' 
    #place it above text 
else #(which is obvious) then 
    #place it below 
end 

的顺序变为

answers < text < thumb < title 

您的文件是相当大的,因此你可能需要直到你达到你的目标重复相同的锻炼。

我们正在做一个binary search到达我们需要插入我们的词的地方。

+0

感谢你这么快速的回答,好像它正是我需要的!现在我需要一些时间来应用它,因为我在正则表达式和红宝石方面都是全面的noob;我会写回+尽快接受答案:) – nrx

+0

嗯...我无法得到如何插入一条线直接上方/下方的匹配线。以前在这种情况下我已经使用了这种方法 'def dataAppendTo(methodName,string,data,bottomEdge) \t return data.sub /(-.*#{methodName}.*\n)(((.*\n) *?)(。*#{bottomEdge}。*)/,'\ 1 \ 2'+ string +' \ 4' end' 插入新行,但在这里看起来并不适用。 – nrx

+0

我认为一个简单的方法来做到这一点,将您的文件作为一个字符串读取,并在'\ n'或'\ n \ r'上拆分,然后找到所需单词的索引并使用'array插入一个新单词。插入(索引,单词)'希望这有助于 – aelor

相关问题