【问题标题】:Find First Word matching from Given Text - Regex从给定文本中查找第一个匹配的单词 - 正则表达式
【发布时间】:2010-09-12 04:24:45
【问题描述】:

我想从给定文本中找到匹配的第一个单词,并使用正则表达式替换为另一个单词。

将以下字符串视为示例文本

您的商品是什么类型的?我想该项目不是字符串,如果是这样 您可以覆盖 ToString() 方法 项目类别并使用 jayant 的 代码。

我想在其中搜索第一个“item”单词并将其替换为文本“hello”。请记住,我只想替换第一个“项目”字,而不是全部。

因此上述文本的输出将类似于以下内容。

你好是哪种类型的?我想该项目不是字符串,如果是这样 您可以覆盖 ToString() 方法 项目类别并使用 jayant 的 代码。

我正在使用 C# 编程来执行此操作,如果可能,我更喜欢使用正则表达式。

谁能帮帮我。

【问题讨论】:

    标签: c# regex word replace


    【解决方案1】:

    您可以将Regex.Replace() 方法与第三个参数(最大替换次数)一起使用:

    Regex rgx = new Regex("item");
    string result = rgx.Replace(str, "hello", 1);
    

    查看ideone

    (虽然在这种情况下,您实际上并不需要 Regex,因为您正在搜索常量。)

    【讨论】:

    • 谢谢你节省了我很多时间。
    • 你知道单词大小写不匹配时如何替换字符串吗?
    • @Jordon 您可以将正则表达式编译为不区分大小写(例如:new Regex("item", RegexOptions.IgnoreCase);
    【解决方案2】:

    如果你愿意接受非正则表达式的替代品,你可以这样做

    public static string ReplaceOnce(this string input, string oldValue, string newValue)
    {
        int index = input.IndexOf(oldValue);
        if (index > -1)
        {
            return input.Remove(index, oldValue.Length).Insert(index, newValue);
        }
    
        return input;
    }
    

    //

    Debug.Assert("bar bar bar".ReplaceOnce("bar", "foo").Equals("foo bar bar"));
    

    【讨论】:

    • 谢谢,您知道如何在执行此操作时忽略大小写吗?
    • @Jordon,IndexOf 有一个需要 StringComparison 枚举的重载。您可以使用该重载来指定区域性/大小写匹配规则(例如,StringComparison.InvariantCultureIgnoreCase)。
    • 谢谢安东尼,感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多