正则表达式按字母顺序在文本中插入一个单词

时间:2017-02-20 10:47:58

标签: ruby regex text-processing

我已经实现了一个ruby脚本,该脚本应该生成&将默认代码段插入正确的位置。问题是其中一些代码必须遵守现有代码的字母顺序。

例如,假设我们需要在以下代码中插入单词'thumb'(在本例中为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]));
    //...

问题是如何找到这个用正则表达式插入文本的精确位置/它是否可能?

1 个答案:

答案 0 :(得分: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到达我们需要插入字词的地方。