VBA Strange RegEx Issue - PullRequest
       23

VBA Strange RegEx Issue

0 голосов
/ 26 ноября 2018

Я использую Visual Basic в Excel, чтобы изменить некоторые данные

Шаблон:

"^(" & Chr(167) & "\s)(\d+\:\d+)\.(\w+.*$)"

В некоторых случаях текст:

§ 34:149.Lorem ipsum dolor sit amet

иЯ хочу разделить текст на

34:149 в текущей ячейке, а затем "Lorem ipsum dolor sit amet" в следующем столбце

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

§ 53:178.40

RegEx возвращает это: 53:178 как одну группу, а затем .40 как другую

Я не могу получить согласованность по возвращенной группе подвыражений, потому что с nnn:nnn.nn, .nnвозвращается как дополнительная группа, а не как член уже выделенной группы.

Я запутался в операции здесь.Я что-то упускаю, потому что я ожидаю, что любые записи в форме NN:NN.NN будут отклонены как совпадения.

После 40 минут проб и ошибок я не могу понять ошибку.

Фрагмент кода RegEx:

strPattern = "^(" & Chr(167) & "\s)(\d+\:\d+)\.(\w+.*$)"
replaceString = "$2"
replaceString = "$2$3"
replaceString2 = "$4"

RE.Global = True
RE.MultiLine = True
RE.IgnoreCase = False
RE.pattern = strPattern

result1 = RE.Replace(source, replaceString)
result2 = RE.Replace(source, replaceString2)

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Используйте шаблон как ^(§\s)([0-9:.]*)\.(\w+.*$) см. https://regex101.com/r/VGg7TJ/2

Так что это будет просто принимать любые совпадающие числа, пока не начнется текст.

0 голосов
/ 26 ноября 2018

\w соответствует цифрам тоже.Вместо этого используйте [a-zA-Z], чтобы сопоставить любую букву ASCII (вам даже не нужно + после нее):

"^(" & Chr(167) & "\s)(\d+:\d+)\.([a-zA-Z].*$)"

См. regex demo

Также,: не является специальным метасимволом регулярных выражений, ему не нужно экранироваться.

Если вы хотите убедиться, что символ после . не является цифрой, используйте [^0-9] или \D после \.:

^(§\s)(\d+:\d+)\.(\D.*)

См. это демонстрационное выражение .Если это не может быть пробел, либо используйте

^(§\s)(\d+:\d+)\.([^\d\s].*)

См. другое демо .

...