C # регулярное выражение с переносами строк - PullRequest
0 голосов
/ 28 мая 2009

Здравствуйте, у меня есть следующий код

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {

            string searchText = "find this text, and some other text";
            string replaceText = "replace with this text";


            String query = "%SystemDrive%";
            string str = Environment.ExpandEnvironmentVariables(query);
            string filePath = (str + "mytestfile.xml"); 

            StreamReader reader = new StreamReader( filePath );
            string content = reader.ReadToEnd();
            reader.Close();

            content = Regex.Replace( content, searchText, replaceText );

            StreamWriter writer = new StreamWriter( filePath );
            writer.Write( content );
            writer.Close();
        }
    }
}

замена не находит текст поиска, потому что он находится в отдельных строках, таких как

найди этот текст,
и какой-то другой текст.

Как бы я написал выражение регулярного выражения, чтобы оно нашло текст.

Ответы [ 3 ]

4 голосов
/ 28 мая 2009

Чтобы искать любые пробелы (пробелы, разрывы строк, табуляции, ...), вы должны использовать \ s в своем регулярном выражении:

string searchText = @"find\s+this\s+text,\s+and\s+some\s+other\s+text";

Конечно, это очень ограниченный пример, но вы поняли ...

1 голос
/ 28 мая 2009

Почему вы пытаетесь использовать регулярные выражения для простого поиска и замены? Просто используйте:

content.Replace(searchText,replaceText);

Вам также может понадобиться добавить '\ n' в вашу строку, чтобы добавить разрыв строки, чтобы замена соответствовала.

Попробуйте изменить текст для поиска на:

string searchText = "find this text,\n" + 
                    "and some other text";
0 голосов
/ 28 мая 2009

Это примечание к вашему конкретному вопросу, но вы заново изобретаете некоторые функции, которые предоставляет вам фреймворк. Попробуйте этот код:

static void Main(string[] args)
{
    string searchText = "find this text, and some other text";
    string replaceText = "replace with this text";

    string root = Path.GetPathRoot(Environment.SystemDirectory);
    string filePath = (root + "mytestfile.xml"); 

    string content = File.ReadAllText(filePath);
    content = content.Replace(searchText, replaceText);

    File.WriteAllText(filePath, content);  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...