使用正则表达式替换Notepad ++

时间:2014-12-04 16:44:02

标签: regex notepad++

我有一个包含全局数组定义的cpp文件但不幸的是,编写定义的人没有使用浮点值的文字(1.0f instad of 1.0),所以我决定使用notepad ++来做到这一点。数组定义如下(它非常大,如10000行代码):

const float ifxColorMap::ifxColorScaleCSTFire[] = 
{
0, 1, 1,1.0f,
0, 0.984314, 1,1.0f,
0, 0.968627, 1,1.0f,
0, 0.952941, 1,1.0f,
0, 0.937255, 1,1.0f,
0, 0.921569, 1,1.0f,
0, 0.905882, 1,1.0f,
...

任何人都可以帮助我使用notepad ++替换0,0.984314,1,1.0f,0,0.984314f,1.0f,1.0f?

3 个答案:

答案 0 :(得分:3)

  

有些人在面对问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。

  • JWZ

这里不需要使用正则表达式,只需要两次查找/替换操作。

  1. 将数组定义复制/粘贴到新文档
  2. 使用f,
  3. 查找/替换所有逗号
  4. 查找/替换所有换行符(可以是\r\r\n\n,具体取决于所使用的平台和其他编辑器 - 您必须亲自检查)然后是0f,,换行后跟0,。由于特殊字符
  5. ,您必须使用“扩展”选项
  6. 将数组定义复制/粘贴回原始文件

答案 1 :(得分:1)

我会分两步完成:

第1步

搜索, *1,

替换, 1.0,(有或没有“f”)

第2步

搜索(\d+\.\d+)(?!f)

替换$1f

答案 2 :(得分:0)

我还用一小块代码解决了这个问题:

#include <iostream>
#include <fstream>
#include <string>

void main()
{
    std::ifstream inFile("in.txt");
    std::ofstream outFile("out.txt");

    char line[401];
    char buffer[401];
    int bufCounter = 0;
    while(!inFile.eof())
    {
        inFile.getline(line, 400);
        size_t len = strlen(line);
        for(size_t i = 0; i < len; i++)
        {
            if(line[i] == ',')
            {
                buffer[bufCounter] = '\0';
                if(buffer[bufCounter-1] != 'f')
                {
                    // has dot inside
                    size_t j = 0;
                    for(; j < bufCounter; j++)
                        if(buffer[j] == '.')
                            break;

                    if(j == bufCounter)
                        outFile << buffer << ".0f, ";
                    else
                        outFile << buffer << "f, ";
                }
                else
                    outFile << buffer << ", ";

                bufCounter = 0;
            }
            else
            {
                if(line[i] == ' ' || line[i] == '\t')
                    ;// Do Nothing
                else
                    buffer[bufCounter++] = line[i];
            }
        }

        outFile << "\n";
    }
}