/ / vim regex correspondente a letras maiúsculas, mas NÃO sublinhado - regex, vim

vim regex combinando com letras maiúsculas, mas NÃO sublinhado - regex, vim

Na sintaxe do vim regex, estou tentando corresponder a todas as palavras iniciando com maiúsculas e não iniciando sublinhado

\([A-Z][a-z_][A-Za-z_]\+\)

Este é o que eu tenho até agora.

Eu quero algo assim:

\([A-Z^_][a-z_][A-Za-z_]\+\)

Onde [A-Z^\_] indica que ele deve corresponder a todos os caracteres maiúsculos, mas não sublinhado.

Qualquer ajuda seria muito apreciada. Desde já, obrigado.

Edit: Minha pergunta foi mal formulada. Quero que o primeiro conjunto corresponda a um caractere maiúsculo, que não tenha um sublinhado na frente. Desculpe.

Respostas:

2 para resposta № 1

[A-Z] ja faz não incluir sublinhados; Eu acho que você quer combinar palavras inteiras, para que você não queira que sua expressão regular corresponda dentro uma palavra. Vim tem embutido < e > (gostar b em outros dialetos de expressão regular, consulte a resposta de @npinti) para limites de palavras-chave; como caracteres maiúsculos / minúsculos e sublinhados são geralmente caracteres de palavra-chave, o agrupamento do seu padrão com esses já deve estar próximo o suficiente:

<([A-Z][a-z_][A-Za-z_]+)>

Para declarar estritamente nenhum sublinhado antes da sua correspondência (mas permitir que outras palavras-chave ou caracteres não-palavras-chave existam), você precisa de um lookbehind negativo: @<! significa não é precedido por:

_@<!([A-Z][a-z_][A-Za-z_]+)

0 para resposta № 2

Onde [A-Z ^ _] indica que deve corresponder a todos os caracteres maiúsculos, mas não sublinhado.

[A-Z] corresponde a todos os caracteres maiúsculos, exceto o sublinhado. No entanto, em sua primeira solução, você solicita que o segundo letra seja minúscula ou sublinhada ([a-z_]) Se eu seguir a sua definição:

todas as palavras com maiúsculas e sem sublinhado

Então [A-Z][A-Za-z_]+ Deveria trabalhar.