2016-07-12 3 views
1

Я хотел бы, чтобы найти все слова, все в верхнем регистре, но когда я делаюGrep только заглавных слов

grep -oP '\w*[A-Z]+\w*' * 

Я получаю

words.py:StringValue 
words.py:WORDS 
words.py:WORDS_ANSWERED 
words.py:Answered 
words.py:True 

, где я был в надежде на

words.py:WORDS 
words.py:WORDS_ANSWERED 

Вопрос

Как я могу убедиться, что выводятся только все слова верхнего регистра?

ответ

5

Вы можете использовать это регулярное выражение с границей слова с обеих сторон и с помощью [A-Z0-9_] вместо \w:

grep -H -oP '\b[A-Z0-9_]*[A-Z]+[A-Z0-9_]*\b' * 

words.py:WORDS 
words.py:WORDS_ANSWERED 
0

Если вы не хотите, чтобы на выходе выводили \w, не включайте его в шаблон.

grep -oP '[A-Z]+' * 

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

grep -oP '\b[A-Z_0-9]+\b' 

Если вы хотите избежать ____ и подобное (? Являются ли они распространены в коде Python), использование

grep -oP '\b[A-Z_0-9]*[A-Z][A-Z_0-9]*\b' 
+1

Если я могу это сделать , тогда 'True' становится' T' на выходе. –

+0

@JasmineLognnes: Обновлено. – choroba

+0

Он также будет соответствовать '___', который не имеет буквы в верхнем регистре. – anubhava

0

регулярное выражение думает S, A и T заглавные слова. Так что это зависит от того, как вы определяете слово в верхнем регистре. Из ваших примеров, похоже, вы ищете нечто вроде ^[A-Z_]+$. Или, если по «прописной слово» вы имеете в виду «нет символов нижнего регистра», [^a-z]+$

Смежные вопросы