Как исключить нечисловые символы в регулярных выражениях - PullRequest
3 голосов
/ 21 мая 2019

У меня есть строка, которая выглядит следующим образом

Section 78(1) of the blabla

Это мое регулярное выражение

\b\s(?!\b(\d{1,3}|\d{1,2}[a-zA-Z]|\d{5,})\b)\b\S*

Ожидаемый результат: of the blabla

Это регулярное выражение работает, но оно не исключает "из" из-за (). Может кто-нибудь мне помочь? Спасибо

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

Кажется, все, что вам нужно изменить, это удалить \b перед \S* и заменить \S* на .+ или .* (если совпадение может быть пустой строкой).

\s(?!\b(?:\d{1,3}|\d{1,2}[a-zA-Z]|\d{5,})\b)(.+)

См. Демонстрационную версию regex , получите значение группы 1. Примечание. Я превратил первые совпадающие цифры группы в отрицательном поле зрения в группу без захвата, чтобы избежать беспорядка в результирующем списке совпадений.

Демонстрация VB.NET :

Dim r As New Regex("\s(?!\b(?:\d{1,3}|\d{1,2}[a-zA-Z]|\d{5,})\b)(.+)")
Dim s As String
s = "Section 78(1) of the blabla"
For Each m As Match In r.Matches(s)
    Console.WriteLine(m.Groups(1).Value)
Next

Результат: of the blabla.

0 голосов
/ 21 мая 2019

Попробуйте этот шаблон: .+\d\)?

Пояснение:

.+ - соответствует одному или нескольким разам любых символов

\d - цифра совпадения

\)? - совпадение ) ноль или один раз

Из-за жадности + она будет соответствовать до последней цифры, если она в скобках, то соответствовать следующей скобке.

Демо

В качестве альтернативы используйте \d+(?:\(\d+\))?(.+)

Тогда желаемый вывод находится в первой группе захвата.

Демо

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