Регулярное выражение отрицательный взгляд за альтернативой для VBScript - PullRequest
4 голосов
/ 31 августа 2009

Поскольку VBScript не поддерживает внешний вид, я ищу альтернативное решение.

У меня есть строка '\ E \ F \'.

Я хочу заменить \ F \ на '~', но ТОЛЬКО если ему не предшествует \ E.

После замены я хочу, чтобы '\ E \ F \' было '\ E \ F \'.

Если бы строка была 'randomText \ F \', я бы хотел, чтобы она была похожа на 'randomText ~' после замены.

Решение:

Я просто решил StrReverse и сделал отрицательный прогноз. Это не самое элегантное решение, но, похоже, оно работает в этом случае.

Dim regEx, str1
str1 = StrReverse("The quick \F\ brown \E\F\ dog.")
Set regEx = New RegExp
regEx.IgnoreCase = True
regEx.Pattern = "\\F\\(?!E\\)"
regEx.Global = True
ReplaceTest = regEx.Replace(str1, "%")

Ответы [ 3 ]

8 голосов
/ 31 августа 2009

VBScript не поддерживает контрольные утверждения. Но попробуйте это:

(^.?|[^\\].|\\[^E])\\F\\

Или это:

(^.?|(?!\\E)..)\\F\\

Заменить совпадение на $1~ (первое совпадение и ~).

Вот объяснение: в общем случае есть две ситуации: если перед \F\ (^.?) нет ни одного символа или только один, все в порядке. Но если перед \F\ есть хотя бы два символа, мы должны убедиться, что эти символы не \E. Итак, мы говорим, что два предыдущих символа являются либо

  • любой символ, кроме \, за которым следует любой произвольный символ ([^\\].) или
  • \, за которым следует любой символ, отличный от E (\\[^E]).

Эта конструкция гарантирует, что допускается любая другая комбинация, кроме \E.

То же самое относится ко второму выражению. Но здесь мы используем отрицательное прогнозное утверждение, чтобы убедиться, что два символа перед \F\ не являются \E.

0 голосов
/ 01 сентября 2009

не нужно использовать регулярное выражение. вот одно решение

strString = "The quick \F\ brown \E\F\ dog"
s = Split(strString," ")
For i=1 To UBound(s)
    If Not InStr(s(i),"\E\F")> 0 And InStr(s(i),"\F") > 0 Then
        s(i) = "~"
    End If 
Next
strFinal=Join(s," ")
WScript.Echo strFinal

выход

C:\test>cscript /nologo test.vbs
The quick ~ brown \E\F\ dog
0 голосов
/ 31 августа 2009

Вы хотите негативный взгляд назад

(?<!\\E)\\F\\
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...