C # Напишите слово в конце, если строковый шаблон содержит - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь написать код,

любую строку, содержащую слово «океан», в конце я напишу «вода»

как бы я это сделал с RegeEx?

Пример:

test1

abcdocean123 


test2
test3

Результат (сохраняет все остальные интервалы в файле):

test1

abcdocean123 water


test2
test3

КодПопытка:

    public string FileRead(string path)
    {
        content = File.ReadAllText(path);
        return content;
    }

    public string FileChange()
    {

        var lines = content.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
                    .Select(line => Regex.Replace(line, @"\bocean\b\n", "water \n"));
        content = String.Join("\n", lines);
        return content;
    }

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

Вам необходимо проверить, содержит ли строка ocean, и, если да, добавить water только к этой строке:

var content = "test1\n\nabcdocean123 \n\n\ntest2\ntest3";
var lines = content.Split(new[] { "\n" }, StringSplitOptions.None)
            .Select(line => line.Contains("ocean") ? $"{line}water" : line);
return string.Join("\n", lines);

См. Демонстрационную версию C #

Если вам все еще нужно использовать регулярное выражение, замените line.Contains("ocean") на Regex.IsMatch(line, @"\bocean\b") или любым другим регулярным выражением, которое вам нужно.Просто отметьте, что \b является границей слова, и \bocean\b будет соответствовать только тогда, когда не заключено в символы слова (цифры, буквы или подчеркивания).

Обратите внимание, что вы должны полагаться на разделение новой строкой, не удаляя пустыелинии, и при присоединении к ним вы не потеряете пустых.

Если вы действительно хотите продолжить свое путешествие с помощью регулярных выражений, вы можете использовать

var content = "test1\n\nabcdocean123 \n\n\ntest2\ntest3";
content = Regex.Replace(content, @"ocean.*", "$&water");
// If your line endings are CRLF, use
// content = Regex.Replace(content, @"ocean[^\r\n]*", "$&water");
Console.WriteLine(content);

См. эта демонстрация C #

Здесь ocean.* соответствует ocean подстроке и .* соответствует остальной части строки , а $& заменяется найденным соответствием, а затем water добавлено.[^\r\n] предпочтительнее, если в конце вашей строки может содержаться CR, и если . соответствует CR, безопаснее использовать [^\r\n], любой символ, кроме CR и LF.

0 голосов
/ 11 февраля 2019

Нет необходимости использовать Regex в вашем случае, если я правильно понял ваш вопрос.

Вы можете просто проверить, содержит ли строка фразу ocean и затем добавить слово water.

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    private static readonly string Token = "ocean";
    private static readonly string AppendToken = "water";
    public static void Main()
    {
        var mylist = new List<string>(new string[] { "firststring", "asdsadsaoceansadsadas", "onemoreocean", "notOcccean" });
        var newList = mylist.Select(str => {
            if(str.Contains(Program.Token)) {
                return str + " " +Program.AppendToken;
            }
            return str;
        });
        foreach (object o in newList)
        {
            Console.WriteLine(o);
        }
    }
}

Этот код можно запустить на DotnetFiddle

0 голосов
/ 11 февраля 2019

Проверьте это

Regex.Replace(line, @"(ocean)(\w+)", "$1water $2\n");

Рабочая скрипка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...