获取匹配模式RUTA的最后3个字符

时间:2019-07-11 07:15:43

标签: regex uima ruta pega

我正在尝试获取模式的最后3个字符。但是我对如何做却一无所知。

请分享您对此的想法。

PACKAGE uima.ruta.example;

Document{->RETAINTYPE(SPACE)};

DECLARE VarA;

((W|NUM)* (W|NUM)*){REGEXP(".{12}")-> MARK(VarA),MARK(EntityType,1), UNMARK(VarA)};

I / P-AB1234567CAB

O / P-CAB

3 个答案:

答案 0 :(得分:1)

您可以使用$来指示源字符串的结尾应在模式中的何处。对于您的示例,您需要最后3个字符,因此可以使用以下模式:

.{3}$

获取最后3个字符。这可以获取任何字符(除了\n之外),但是您可以更具体一些,例如,如果您只需要大写字母,则可以使用:

[A-Z]{3}$

或者如果您可以接受大写,小写或数字,则可以使用

\w{3}$

在regex101.com上进行实验,以了解适合您的情况。

答案 1 :(得分:1)

假设您的数据在单元格A1中 您可以使用这两个宏的第二个宏

Option Explicit

Sub Extract_Laste_3Carachters(st As Range, Patt$, n)
  Dim Obj As Object
  Set Obj = CreateObject("Vbscript.RegExp")
  With Obj
   .Pattern = Patt
   .Global = True
  End With
  If Len(st) <= 3 Then st.Offset(, 1) = st: Exit Sub
   If Obj.test(st) Then
        If n > Obj.Execute(st).Count Then n = Obj.Execute(st).Count
          st.Offset(, 1) = _
        Obj.Execute(st)(n - 3) _
        & Obj.Execute(st)(n - 2) _
        & Obj.Execute(st)(n - 1)
    End If
End Sub

'+++++++++++++++++++++++++++++++++

Sub Test_Me()
Call Extract_Laste_3Carachters(Range("a1"), ("\w"), Len(Range("a1")))
End Sub

答案 2 :(得分:1)

我尝试了下面的代码,现在可以正常工作!

PACKAGE uima.ruta.example;

Document{->RETAINTYPE(SPACE)};

"(?i)\\b(?=.*\\d)[1]{0,1}[A-Z0-9]{2}[\\s |-]{0,2}[A-Z0-9]{7}[\\s |-]{0,2}([A-Z]{3})\\b" ->1 = EntityType;