是否可以使用RegEx重新排列文字?

时间:2015-04-18 01:02:47

标签: regex groovy filemaker

我在数据库中有一个设备列表,例如Model X123 ABC。系统的另一部分接受用户输入,并且需要尽可能地将它们的条目与现有设备匹配。但是用户可以输入他们想要的任何东西。他们可能会将Model 100 ABC X123Model X123输入上述模型。

明白,这是一个一般的例子,可用模型和匹配用户条目的排列是巨大的,我只是尝试尽可能多地匹配,以便可以将手动更正保持在最低限度。

系统是在FileMaker中构建的,但可以访问我希望的任何插件,这意味着我可以访问Groovy,PHP,JavaScript等。我目前正在使用ScriptMaster插件为其他人使用Groovy。简单的正则表达式模式匹配其他地方,我想知道最简单的方法是使用正则表达式。

我对正则表达式的想法是我正在寻找模式,但我不确定我是否可以说,"将此分组分配给此模式,无论模式的顺序如何组&#34。在上面,我想找出该字符串是否包含三种模式:(?i)\bmodel\b(?i)\b[a-z]\d{3}\b(?i)\b[a-z]{3}\b,但我并不关心它们的顺序。如果所有三种如果找到了,我想按照特定的顺序放置它们:首先是单词" model",大写,然后是全大写的字母数字代码,最后是全字母的纯字母代码。

可以(应该?)正则表达式处理这个吗?

2 个答案:

答案 0 :(得分:2)

我建议将输入标记为单词,将每个输入与支持的标记相匹配,然后将它们组合成规范的分类插槽。

更好的方法是在用户输入信息时提供搜索建议,并要求用户选择建议。

但是可以通过(以编程方式)构建具有所有前提的怪物正则表达式模式来实现它:

\b(?:(model)\s+([a-z]\d{3})\s+([a-z]{3})
    |(model)\s+([a-z]{3})\s+([a-z]\d{3})
    |([a-z]\d{3})\s+(model)\s+([a-z]{3})
    |([a-z]\d{3})\s+([a-z]{3})(model)
    |([a-z]{3})(model)\s+([a-z]\d{3})
    |([a-z]{3})\s+([a-z]\d{3})\s+(model)
)\b

它必须使用命名的捕获组,但我将其留下,希望上述内容可能接近可读。

答案 1 :(得分:0)

我不确定我是否完全理解您的基本目标 - 这是否能够匹配类似产品(例如,具有相同型号的产品)?如果是这样,可以在计算字段中使用像这样的单词排列函数来创建一个多键:http://www.briandunning.com/cf/1535

如果你需要在FileMaker中进行部分匹配,你也可以使用像这样的redux搜索功能:http://www.fmfunctions.com/fid/380

如果您有任何不适合在此处发布的问题,请随时与我联系。