【问题标题】:Detect below string using regex in uima RUTA在 uima RUTA 中使用正则表达式检测以下字符串
【发布时间】:2017-07-10 07:48:03
【问题描述】:

我正在尝试使用 UIMA RUTA 中的正则表达式将下面的字符串注释为类型。

示例:

  • *******$10.00*

其他变体:

  • *******$10.00***
  • *******$90.00*
  • *********$99**

    正则表达式:*+\$\d+.\d+*+

UIMA 正则表达式:

SPECIAL{REGEXP("\\*+\\$\\d+.\\d+\\*+") -> MARK(AmC,1)};

我无法检测到 * 代表贪婪的正则表达式,但由于我使用转义字符()仍然缺少某些东西。任何解决方法?

PS:它适用于其他正则表达式引擎,但不适用于 UIMA RUTA

【问题讨论】:

  • 您忘记对星号之前的最后一个反斜杠进行双重转义(假设您需要双重转义)。另外,也许您需要边界标记?
  • SPECIAL{REGEXP(".*\\*+\\$\\d+\\.\\d+\\*+.*") -> MARK(AmC,1)}; ???
  • @TimBiegeleisen 当我在 regex101.com 上测试但在 UIMA RUTA 中不工作时它可以工作。
  • 这行不通,因为该条件仅适用于匹配注释的覆盖文本,它仅代表所需字符串的一部分。
  • 反之亦然:正则表达式将看不到足够的文本以完全匹配。我会添加一个答案...

标签: regex regex-greedy uima uimanageddocument ruta


【解决方案1】:

REGEXP 条件将 Java 模式 matches() 应用于规则元素的匹配注释的覆盖文本。在您的示例中,这是SPECIAL,它是一个特殊字符。因此,正则表达式尝试匹配单个“*”,然后重新匹配下一个字符(不包括数字和句点)。

REGEXP 条件在这里并不合适。您应该使用简单的正则表达式规则,例如:

"\\*+\\$\\d+.\\d+\\*+" -> AmC;

免责声明:我是 UIMA Ruta 的开发人员

【讨论】:

  • 像魅力一样工作。非常感谢您提供如此精彩的解释。
猜你喜欢
  • 1970-01-01
  • 2012-08-16
  • 1970-01-01
  • 2021-04-08
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
相关资源
最近更新 更多