Получите последние 3 символа совпадающего шаблона RUTA - PullRequest
1 голос
/ 11 июля 2019

Я пытаюсь получить последние 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 ]

1 голос
/ 11 июля 2019

Предположим, ваши данные в ячейке 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
1 голос
/ 16 июля 2019

Я попробовал приведенный ниже код и теперь он работает!

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;
1 голос
/ 11 июля 2019

Вы можете использовать $, чтобы указать, где конец исходной строки должен быть в шаблоне.Для вашего примера вам нужны последние 3 символа, чтобы вы могли использовать такой шаблон:

.{3}$

, чтобы получить последние 3 символа.Это получит любой символ (кроме \n), но вы можете быть более конкретным, например, если вы просто хотите использовать заглавные буквы, вы можете использовать:

[A-Z]{3}$

или если вы можете принять заглавные буквы,строчные или цифры, вы можете использовать

\w{3}$

Эксперимент на regex101.com, чтобы увидеть, что работает для вас.

...