Исключить некоторые слова из регулярного выражения - PullRequest
0 голосов
/ 04 мая 2018

У меня есть функция, которая вставляет пробел после таких символов, как: / -

  Private Function formatColon(oldString As String) As String

  Dim reg As New RegExp: reg.Global = True: reg.Pattern = "(\D:|\D/|\D-)"
  Dim newString As String: newString = reg.Replace(oldString, "$1 ")
  formatColon = Replace(Replace(Replace(newString, ":  ", ": "), "/  ", "/ "), "-  ", "- ")

  End Function

Код легко исключает даты. Я хочу исключить некоторые специфические строки, такие как 'w / d'. Есть ли способ?

до abc/abc/15/06/2017 ref:123243-11 ref-111 w/d

после abc/ abc/ 15/06/2017 ref: 123243-11 ref- 111 w/ d

я хочу исключить последние w / d

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Вы можете использовать (?!w/d) lookahead, чтобы избежать совпадения w/d с вашим шаблоном:

Dim oldString As String, newString As String
Dim reg As New RegExp
With reg
 .Global = True
 .Pattern = "(?!w/d)\D[:/-]"
End With
oldString = "abc/abc/15/06/2017 ref:123243-11 ref-111 w/d"
newString = reg.Replace(oldString, "$& ")
Debug.Print newString

enter image description here

См. Демонстрационную версию regex .

Детали шаблона

  • (?!w/d) - местоположение, за которым не следует w/d
  • \D - любой нецифровый символ
  • [:/-] - :, / или - char.

Обратная ссылка $& относится ко всему совпадению из шаблона замены, нет необходимости заключать весь шаблон в круглые скобки.

0 голосов
/ 04 мая 2018

Вот еще одно решение.

^/(?!ignoreme$)(?!ignoreme2$)[a-z0-9]+$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...