如果字符串模式包含C#,请在末尾写Word

时间:2019-02-10 23:30:16

标签: c# regex asp.net-core

我正在尝试编写代码,

任何包含单词“ ocean”的行,我都会在最后写上“ water”

我将如何与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 :(得分:1)

您需要检查一行是否包含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# demo

如果您仍然需要使用正则表达式,请将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);

请参见this C# demo

在这里,ocean.*匹配ocean子字符串,.*匹配其余的 line $&替换为找到的匹配项,然后{ {1}}已添加。如果行尾可能包含CR,并且water与CR匹配,则[^\r\n]是可取的,使用.,CR和LF以外的任何字符更安全。

答案 1 :(得分:0)

检查

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

Working Fiddle

答案 2 :(得分:0)

如果您的问题正确,那么在您的情况下完全不需要使用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

上运行此代码