Регулярное выражение, поиск строки содержит, но не начинается с - PullRequest
3 голосов
/ 04 мая 2011

Я работаю над синтаксическим анализом текстового файла, проходя через каждую строку, и мне трудно разобраться в Regex.Часть этого анализа включает изменение вхождений, таких как:

É на é

Я пробовал следующее регулярное выражение, но оно ничего не возвращает:

/^(?!&)(É)/

Есть предложения?

Ответы [ 3 ]

5 голосов
/ 04 мая 2011

То есть вы хотите сопоставить É, только если это не в начале строки?

Использовать

/(?<=.)&Eacute;/

(предполагается, что Ruby 1.9, потому что 1.8 не поддерживает просмотр сзади)

Обоснование: . соответствует любому символу, кроме новой строки.Поэтому, если утверждение с задним взглядом совпадает, мы не в начале строки.

2 голосов
/ 04 мая 2011

Если вы используете Ruby 1.9, вы можете использовать следующий вид:

t.gsub! /(?<=.)&Eacute;/, '&eacute;'

В Ruby 1.8 вам нужно прибегнуть к чему-то вроде этого:

while t =~ /(.)&Eacute;/
    t.sub! /(.)&Eacute;/, "#{$1}&eacute;"
end

где t - ваша строка, которую нужно изменить.

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

Если вы хотите сопоставить &Eacute; в любом месте строки, но не на первой позиции:

/^.+(&Eacute;)/

Это соответствует, например, "abc&Eacute;def", но не "&Eacute;"

ОБНОВЛЕНИЕ: исправлены ошибки, указанные Тимом

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