VBA проверить строку соответствует точно слово - PullRequest
0 голосов
/ 13 марта 2020

Я использую этот код ниже, чтобы проверить, соответствует ли строка шаблону.

Sub chkPattern(str As String, pattern As String) 

    Dim objRegex As Object
    Set objRegex = CreateObject("vbscript.regexp")
    objRegex.pattern = pattern
    MsgBox objRegex.test(str)

End Sub

В частности, я хочу проверить, соответствует ли строка всей строке "abc" or "cde" of "xy"

Для Например, если входными данными являются «abccde» или «abcxy» или «abccdexyz», я ожидаю, что он вернет false

Некоторые шаблоны, которые я уже попробовал, такие как: «abc | cde | xyz», «\ b ( abc | cde | xyz) \ b) "не работают

Можно ли это сделать в VBA с помощью Regex?

Ответы [ 3 ]

1 голос
/ 13 марта 2020

можно да. Когда я читаю ваш вопрос, вы хотите применить OR с символом канала.

Sub Test()

Dim arr As Variant: arr = Array("abc", "cde", "xy")

With CreateObject("VBScript.RegExp")
    .Pattern = "^(" & Join(arr, "|") & ")$"
    Debug.Print .Test("abcd") 'Will return False
    Debug.Print .Test("abc") 'Will return True
End With

End Sub

Ключ, соответствующий строке целом , - это начальная строка ancor ^ и конец строки ancor $. Если вы имели в виду, что хотите проверить соответствие частичное , вы просто изменили косую черту. Используйте обратную косую черту вместо прямой косой черты> \b(abc|cde|xyz)\b в качестве шаблона.

Помните, что если вы хотите игнорировать сравнение регистра, используйте .IgnoreCase = True.


В качестве альтернативы используйте встроенную функцию Like оператор.

0 голосов
/ 13 марта 2020

Для соответствия целому слову используйте

(\w+)

https://regex101.com/r/sve6Tp/1

(\w+) Группа захвата

\w+ соответствует любому символу слова (equal to [a-zA-Z0-9_])

+ Квантификатор - соответствует от одного до неограниченного числа раз, сколько возможно,

enter image description here

0 голосов
/ 13 марта 2020

\ babc \ b | \ bcde \ b | \ bxy \ b должно работать для "ab c" или "cde" или "xy", но не для других вариантов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...