Regex encontrar caso apropriado e excluir alguma palavra no notepad ++ [closed]

0

Eu tenho um texto assim:

After a lifetime in the French diplomatic corps, the Count de Gruse lived with his wife in an elegant townhouse on Quai Voltaire. He was a likeable man, cultivated of course, with a well-deserved reputation as a generous host and an amusing raconteur.

Eu quero encontrar todos os casos apropriados usando o achado regex. Minha exclusão é o caso apropriado após o ponto como

. He

Eu pesquisei na internet e encontrei esta entrada comigo

[a-z] [A-Z][\w]*

O problema é que você pode marcar Quai nem todas as 2 ou 3 palavras como Quai Voltaire e como posso excluir algum caso apropriado como eu, eu, meu ...?

Como posso fazer isso?

    
por SevenT 18.11.2014 / 16:05

3 respostas

1

Eu concordo com o Andreas. Agora, se essa for uma tarefa única que você pode dividir em várias etapas, sugiro excluir temporariamente as exceções primeiro, provavelmente usando um caractere não usado de outra forma e, em seguida, retrocedendo mais tarde. Aqui está um Find e um Substituir:

\b(I|God|Dad)\b
@

Isso nos dá algo assim (observe que eu e o meu não estamos em maiúsculas em inglês):

Did @I write this to @God, @Dad, or my wife? After a lifetime in the 
French diplomatic corps, the Count de Gruse lived with his wife 
in an elegant townhouse on Quai Voltaire! He was a likeable man, 
cultivated of course, with a well-deserved reputation as a 
generous host and an amusing raconteur.

A partir daí, você pode usar um case-sensitive regex e um look-behind-negativo para encontrar palavras maiúsculas precedidas por um ou mais espaços que não seguem um limite de sentença:

 (?<![.?'!"])[ ]+[A-Z]

Observe que isso falhará no texto de capa dura, como "Francês" no exemplo, como mostrei acima.

O Regex pode ser bastante frágil, então algo assim pode exigir um pequeno programa / script, se não for uma tarefa única. (Ou talvez possivelmente uma macro.)

Dito isto, aqui está o que você pediu, incorporando também o lookahead negativo para fazer tudo em uma única etapa. :)

(?<![.?'!"]) (?!Dad\b|God\b|I\b)[A-Z]

DICA: se você não tem ou não prefere usar a caixa de seleção sensível a maiúsculas e minúsculas, é possível colocar isso na frente do regex:

(?c)
    
por 19.11.2014 / 01:24
0

Expressões regulares e exceções complexas não combinam muito bem. perl vem muito rapidamente à mente quando se trata de processamento de linguagem natural .

    
por 18.11.2014 / 18:39
0

Quando eu adiciono

[\w]*

então meu regex é

(?<![.?'!"]) (?!Dad\b|God\b|I\b)[A-Z][\w]*

Funciona perfeitamente

    
por 19.11.2014 / 03:41

Tags