Регулярное выражение - Как найти совпадение в матче? - PullRequest
7 голосов
/ 10 февраля 2011

Я пытался сделать следующее, используя объект VBs Regular Expression, но не смог найти простой способ сделать это.Есть ли кто-нибудь, кто мог бы дать некоторые предложения?

Например, у меня есть строка "12 <56> 89", я хотел бы получить строку внутри "<>", которая должна быть "56" вэтот случай.Сейчас я пытаюсь найти выражение "<\ d +>", которое вернет <56>.Затем я пытаюсь найти выражение "\ d +" из результата первого совпадения, которое вернет 56.

Мне не нравится этот способ, потому что он должен вызывать функцию дважды.Мне интересно, возможно ли получить строку внутри "<>", используя только одно регулярное выражение?Спасибо!

Спасибо, Аллен

Ответы [ 2 ]

11 голосов
/ 10 февраля 2011

Используйте выражение "<(\ d +)>"

Затем вы можете получить доступ ко всем матчам как к коллекции. Ваше регулярное выражение может соответствовать более одного раза, если вы установите RegEx.Global = True. Первое совпадение находится в var (0), второе - в var (1). Группы соответствия находятся в var (0). SubMatches (0) и т. Д. Если вы делаете это только один раз, вы можете в одну строку:

Dim RegEx : Set RegEx = New RegExp
RegEx.Pattern = "<(\d+)>"
Dim strTemp : strTemp = "12<56>89"
WScript.Echo RegEx.Execute(strTemp)(0).SubMatches(0)

Проверьте ваши регулярные выражения здесь: http://www.regular -expressions.info / vbscriptexample.html

4 голосов
/ 10 февраля 2011

Используйте выражение <(\ d +)>. Выполните регулярное выражение, используя

Set matches = expr.Execute(text)
If matches.Count > 0 Then
    result = matches(0).Submatches(0)
End If

Коллекция Submatches содержит строки, которые соответствуют группировкам в скобках в выражении.

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