我想在文本文件中找到包含“字母或数字”,“新行”,“字母或数字”序列的每个字符串,然后用“空格”替换“新行”。
这是我到目前为止所尝试的:
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一切正常,我只是复制粘贴他的答案。感谢所有回复的人!
答案 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);
}