【问题标题】:Writing a regular expression that will select a string编写将选择字符串的正则表达式
【发布时间】:2017-03-02 01:14:05
【问题描述】:

我有一个 .txt 文件,其中包含蛋糕的名称(如下 * Exported from... )以及它是从哪里导出的。我在 WPF/C# 中做一个 UI,我有一个文本框,您可以在其中输入一个字符串并单击“搜索”按钮。我想编写一个正则表达式,它只会在蛋糕的整个名称中查找该字符串,并使用该字符串显示所有蛋糕的名称。我没有看到带有这些名称的模式。

例如:

输入 --> 在文本框中输入:草莓

输出 --> 草莓脆饼,伊娃的草莓蛋糕

这是我的 .txt 文件:

                * Exported from MasterCook *

                        Blueberry Crunch Coffee Cake

                * Exported from MasterCook *

                        Filled Berlin Doughnuts (Bismarks)

                * Exported from MasterCook *

                        Strawberry Shortcake

                * Exported from MasterCook *

                         Eva's Strawberry Cake

                * Exported from MasterCook *

                        Fresh Apple Cake #3

                * Exported from MasterCook *

                         Frozen Lady Heath Dessert **

                * Exported from MasterCook *

                        Grandma Stefan's German Cheese Torte

【问题讨论】:

  • 怎么样,Regex.Matches($"^{input}.*$", fileContentshere);?

标签: c# regex wpf regular-language


【解决方案1】:

我不知道您的蛋糕清单有多大,但您描述问题的方式根本不需要 RegEx。默认情况下,RegEx 一次计算一行 - 除非您另有明确说明。

正则表达式".*Strawberry.*" 本质上与mystring.Contains("Strawberry") 相同。 Contains() 方法比正则表达式选项快很多,如果列表非常大,这会产生很大的不同。

您需要管理的是蛋糕列表。您可以读取一次文件并将蛋糕列表存储在列表中,或者如果文件很大,您可以将其放入数据库或 Lucene 索引中。

【讨论】:

    【解决方案2】:

    对于这个简单的场景,您需要一个正则表达式。

    假设你的蛋糕列表存储在一个列表中,那么你需要做的就是这样

    List<string> searchCakes(string keyword, List<string> allCakes) {
        return allCakes.Where(cake=> cake.Contains(keyword)).ToList()
    }
    

    【讨论】:

      猜你喜欢
      • 2021-05-16
      • 2019-06-16
      • 1970-01-01
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多