2013-07-23 3 views
2

У меня есть вопрос, который я считаю довольно простым, но я не знаю, как правильно это сделать.Идентифицировать шаблон в словах

В принципе, я хотел бы, чтобы моя программа была в состоянии идентифицировать слова с определенным шаблоном в ней, и если да, чтобы извлечь то, что перед шаблоном.

Образец будет в данном случае /F, особенно в конце слова, и он будет извлекать то, что было раньше.

Например, если программа найдет 21/F, она будет идентифицировать ее как хорошее совпадение и извлечет 21. Но если бы слово было 21/Fudge, это ничего не сделало.

Знаете ли вы, как искать совпадение в определенной позиции в слове?

ответ

5

Я хотел бы сделать:

If str Like "*/F" Then 
    before=Left(str, Len(str)-len("/F")) 
Else 
    'No match! 
End If 
+0

Это будет работать с «21/Fudge»? – matzone

+0

Нет, '" 21/Fudge "Like" */F "= False'. Вам придется разветвляться. –

+0

Спасибо @LS_dev, работает как шарм! – Phalanx

2

Я хотел бы использовать регулярное выражение, что-то вроде этого:

\b\w+?(\d+)\/F\b 

Это поможет вам соответствовать любые цифры перед «/ F» и игнорировать остальную часть слово. Чтобы использовать его в VBA, вам нужно добавить ссылку на «Microsoft VBScript Regular Expressions 5.5», и вот за этим стоит VBA. Паттерн "\ ч \ б +? (\ D +)/F \ Ъ"

Public Sub Extract(Pattern as String, Text as String) 

    Dim regEx As VBScript_RegExp_55.RegExp 
    Dim matches As VBScript_RegExp_55.MatchCollection 

    Set regEx = CreateObject("VBScript.RegExp") ' Create a regular expression. 

    regEx.Pattern = Pattern 
    Set matches = regEx.Execute(Text) 

    Dim i as Long 

    For i = 0 To (matches.Count - 1) 
     Debug.Print Matches.Item(i) 
    Next i 

End Sub 

Надеется, что это помогает.

Смежные вопросы