【问题标题】:Data Parsing/Pattern matching using Drools使用 Drools 进行数据解析/模式匹配
【发布时间】:2014-03-08 12:39:10
【问题描述】:

我是 .Net 和 Drools 的初学者。我将 Drools 3.0 用于 .Net 应用程序。我正在尝试解析变量的数据(归档:- 主题/正文和类:-EmailProperties)。

例如:- 如果 Text = “Atal 是一名 .Net 开发人员,正在尝试解析器。” 所以我想要 'parser' 或 '.Net' 单词作为输出。

我在网上搜索过,我发现我们可以通过使用“匹配”关键字和正则表达式来做到这一点。为此,我正在使用以下正则表达式:-

rule "Hello"
    when
        //m: EmailProperties(Body.indexOf(".Net"))
        //m: EmailProperties(Body matches  "(?i)(?s)\w.*Developer.*")
        //  m: EmailProperties(Body matches  "/^Developer$/")
        // m: EmailProperties(Subject == "Open Position")
         m: EmailProperties(Subject matches "/^Position$/")
    then
        EmailProperties.debugResult("Hello Brother This is testing for Rules Engine");
end

我点击了以下链接:- regular expression for exact match of a word

问题:-

1.. 我在这里做错了什么?

2.. 有没有其他方法可以使用 Drools 和 .Net 实现解析?

3.. 我将 Drools 3 用于 .Net 应用程序。每当我在 .Net/Drools 中编写正则表达式时,我是否需要注意这件事,或者无论是 java、.Net 还是任何其他应用程序,它在任何地方都是一样的?正则表达式是否因技术而异。

谢谢!!

【问题讨论】:

    标签: c# .net drools


    【解决方案1】:

    使用 Drools 运算符进行匹配,您不必使用锚 ^ 和 $,因为匹配(如在 Java 中)模式匹配整个目标字符串与模式。

    如果您想与目标字符串的子字符串进行模式匹配,则必须用.* 将模式括起来。 (这意味着任意的字符序列匹配。)

    您可以使用 indexOf 执行此操作,但您应该知道,即使字符串包含一个子字符串 包含,它也会匹配您想要查找的子字符串。例如,如果目标字符串包含例如“.Netstocking”,则 indexOf(".Net") 将返回非负结果。

    使用 Drools 进行解析可以通过多种方式实现。在一系列单词(或标记)中寻找字符串可能会产生令人惊讶的结果。一种非常稳健的方法是将文本切割成单词并一个接一个地处理单词。然后规则可以根据序列号匹配单词,例如,“green village”与“village green”不同。

    关于您的最后一个问题:正则表达式因技术而异。 Java(以及 Drools)使用一组相对先进的通配符和结构。 Perl 处于最前沿。 UNIX 实用程序(grep、awk)有点落后。 XQuery 1.0/XPath 2.0 没有 Java 的所有特性。 (事情发生了变化。也许我忽略了最近的发展。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-28
      • 2013-02-27
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多