用C#中的regex替换“new line”char

时间:2015-06-30 11:56:22

标签: c# regex

我想在文本文件中找到包含“字母或数字”,“新行”,“字母或数字”序列的每个字符串,然后用“空格”替换“新行”。

这是我到目前为止所尝试的:

private void button3_Click(object sender, EventArgs e)
{
     string pathFOSE = @"D:\Public\temp\FOSEtest.txt";     
     string output = Regex.Replace(pathFOSE, @"(?<=\w)\n(?=\w)", " ");                      

     string pathNewFOSE = @"D:\Public\temp\NewFOSE.txt";
     if (!System.IO.File.Exists(pathNewFOSE))
     {
          // Create a file to write to. 
          using (System.IO.StreamWriter sw = System.IO.File.CreateText(pathNewFOSE))
          {                
          }
     File.AppendAllText(pathNewFOSE, output);
     }
}

但是我的所有程序都是创建一个新的文本文件,只包含这一行"D:\Public\temp\FOSEtest.txt"

知道发生了什么事吗?同样是\n在Windows7中搜索文本文件中新行的正确方法吗?感谢

编辑:我做了Avinash建议的更改,并补充说我正在使用Windows 7。

编辑2 :我想我需要了解为什么Replace发生在路径字符串上,而不是在尝试建议之前导致的文件上。

最终编辑:感谢stribizhev一切正常,我只是复制粘贴他的答案。感谢所有回复的人!

2 个答案:

答案 0 :(得分:4)

你需要使用积极的外观。

(?=\w)

Regex.Replace(pathFOSE, @"(?<=\w)[\r\n]+(?=\w)", " "); 称为正向前瞻,断言匹配必须后跟单词字符。

String.prototype.setEvidence = function(option) {
    var _parent = option.parent; //Mandatory
    var _ele = option.element || undefined; //optional
    var _pos = option.position || undefined; //optional

    if (typeof this === 'object') {
        _searchKey = this;
        pos = {}
        if (typeof _pos == 'undefined') {

            _pos = {};
            _pos.begin = $("." + _parent).html().indexOf(_searchKey);

        }
        var _content_string = $("." + _parent).html();
        _content_string = _content_string.substring(0, _pos.begin) + '<span class="_tmp_' + _ele.name + ' _tmp_span"></span>' + _content_string.substring(_pos.begin);

        $("." + _parent).html(_content_string);

        pos = $('._tmp_' + _ele.name).offset();
        console.log(pos);

        $("." + _parent).html(function(index, html) {
            return html.replace('<span class="_tmp_' + _ele.name + ' _tmp_span"></span>', '');
        });

        $("." + _parent).parent().prepend('<code id="' + _ele.id + '"><span class="_code_string ' + _ele.name + '" style="left:' + pos.left + '">' + _searchKey + '</span></code>');

        $('#' + _ele.id).offset({
            top: pos.top,
            left: 0
        });

        $('#' + _ele.id + ' span').css('marginLeft', pos.left + 'px');

    }
}


var searchKey = "simply dummy";
var searchKey2 = "Ipsum is simply dummy";
var searchKey3 = "galley of type and scrambled";
var searchKey4 = "scrambled it to make a type";

searchKey.setEvidence({
    parent : 'container',
    element : {
        name: 'container1',
        id : 'trialId1',
        class : '',
    }
});
searchKey2.setEvidence({
    parent : 'container',
    element : {
        name: 'container2',
        id : 'trialId2',
        class : '',
    }
});

searchKey3.setEvidence({
    parent: 'container',
    element: {
        name: 'container2',
        id: 'trialId3',
        class: '',
    },
    position: {
        begin: 230,
        end: 258
    }
});

searchKey4.setEvidence({
    parent: 'container',
    element: {
        name: 'container1',
        id: 'trialId4',
        class: '',
    },
    position: {
        begin: 249,
        end: 276
    }
});

答案 1 :(得分:3)

在Windows中,换行符通常类似于\r\n(插入符号返回+换行符)。 因此,您可以匹配前缀和后跟字母数字的换行符

string output = Regex.Replace(pathFOSE, @"(?<=\w)\r\n(?=\w)", " ");

请注意\w也匹配Unicode字母和下划线。如果您不需要该行为(并且只需要匹配英文字母),请使用

string output = Regex.Replace(pathFOSE, @"(?i)(?<=[a-z0-9])\r\n(?=[a-z0-9])", " ");

如果你有各种操作系统或程序的换行符,你可以使用

string output = Regex.Replace(pathFOSE, @"(?i)(?<=[a-z0-9])(?:\r\n|\n|\r)(?=[a-z0-9])", " ");

如果有多个换行符,请添加+量词(?:\r\n|\n|\r)+

要对文件内容执行搜索和替换,您需要读取文件。

你可以用

完成
var pathFOSE = @"D:\Public\temp\FOSEtest.txt";
var contents = File.ReadAllText(pathFOSE);
var output = Regex.Replace(contents, @"(?i)(?<=[a-z0-9])(?:\r\n|\n|\r)(?=[a-z0-9])", " ");

var pathNewFOSE = @"D:\Public\temp\NewFOSE.txt";
if (!System.IO.File.Exists(pathNewFOSE))
{
    File.WriteAllText(pathNewFOSE, output);
}