如果某个字符串后面有匹配的字符串,请将其替换?

时间:2014-03-06 10:52:04

标签: c# regex replace

我有一个这样的字符串:

this'is'my'
test'
string'

我需要在'。

上使用Regex进行查找和替换

我需要替换'with'\ r \ n,但不能更改已经有行间距的其他行,基本上看起来像这样:

this'
is'
my'
test'
string'

我无法移除所有“\ r \ n”,然后将它们全部更改,因为我需要快速并且只需要更改需要更改的内容。

目前我这样做:

var EscapeCharactor = "?"
var LineEndCharactor = "'"

string result = Regex.Replace(data, @"(([^\" + EscapeCharactor + "]" + LineEndCharactor + @"[^\r\n|^\r|^\n])|(\" + EscapeCharactor + @"\" + EscapeCharactor + LineEndCharactor + "[^\r\n|^\r|^\n]))", "$1\r\n");
return ediDataUnWrapped;

但它正在创造这个:

this'i
s'm
y'
test'
string'

这是否可能只改变某些字母并且不包括额外的字母,或者我将不得不管理删除所有\ r \ n然后将其添加到所有这些字母?

3 个答案:

答案 0 :(得分:1)

这是一种非正则表达式方法:

string testString = @"this'is'my'
test'
string'";

var split = testString.Split(new[]{"'"}, StringSplitOptions.RemoveEmptyEntries)
    .Select(s => s.Trim() + "'");
testString = string.Join(Environment.NewLine, split);

答案 1 :(得分:0)

如果你真的想使用正则表达式(Tim的解决方案看起来更好)

    string test = "this'is'my'test'\r\nstring'";

    test = Regex.Replace(test,@"[\r\n]","");
    Regex rgx = new Regex("(\\w')([\\\\r]?[\\\\n]?)", RegexOptions.IgnoreCase);
    var rep = rgx.Replace(test,"$0\r\n");

    Console.WriteLine(rep);

结果

this'
is'
my'
test'
string'

// KH

答案 2 :(得分:0)

另一种解决方案有两个简单String.Replace()

using System;

public class Program
{
    public static void Main()
    {
        string s = "this'is'my'test'\r\nstring'\r\n";
        s = s.Replace(Environment.NewLine, String.Empty); // remove /r/n
        s = s.Replace("'", "'" + Environment.NewLine); // replace ' by ' + /r/n
        Console.WriteLine(s);
    }
}

输出:

this'
is'
my'
test'
string'