Как сопоставить часть строки после шаблона с помощью регулярного выражения Emacs

Как сопоставить слова собака и кошка в следующих строках.

The dog

The cat

Слово в начале строки ("The") остается прежним. Слова «собака» и «кошка» меняются, и это слово должно быть сопоставлено.

Регулярное выражение должно соответствовать слову после слова «The», но не «The».


person Talespin_Kit    schedule 01.08.2011    source источник
comment
Можете ли вы уточнить свой вопрос: всегда ли он будет соответствовать только собаке или кошке? Всегда ли предыдущее слово будет The? Другими словами, можете ли вы обобщить свой вопрос?   -  person kevlar1818    schedule 01.08.2011
comment
Вы должны уточнить, говорите ли вы об интерактивном поиске регулярных выражений, например. с помощью M-x replace-regexp или программно. Если последнее, ответ Майкла Маркерта поможет вам.   -  person sanityinc    schedule 01.08.2011
comment
Регулярное выражение используется в программе, а не интерактивно.   -  person Talespin_Kit    schedule 02.08.2011


Ответы (2)


Это должно вам понравиться:

The \(\w+\)

Слово после The является группой \1.

В elisp это

(replace-regexp "\\(\\w+\\)" "\\1")
person Michael Markert    schedule 01.08.2011
comment
Просто чтобы добавить немного информации, в программе он должен использоваться как \(\\w+\) и \\1. - person Talespin_Kit; 02.08.2011
comment
Это неправильно: в строке это должно быть \\(\\w+\\) и \\1. Просто \( будет оцениваться как (. - person Michael Markert; 02.08.2011
comment
Если подумать: вы, вероятно, были укушены бегством, я добавил это к ответу. - person Michael Markert; 02.08.2011

В регулярных выражениях Emacs нет утверждений нулевой ширины, поэтому вы не можете избежать сопоставления предшествующего текста, если он критичен для шаблона.

Конечно, вы можете использовать группировку, чтобы изолировать интересующие вас части совпадающей строки (согласно ответу Майкла Маркерта).

person phils    schedule 01.08.2011