Создание сокращений в Python - PullRequest
12 голосов
/ 04 декабря 2010

Как в Python сделать аббревиатуру для данной строки?

Как, например, строка ввода:

'First Second Third'

Вывод:

'FST'

Япытаясь что-то вроде:

>>> for e in x:
        print e[0]

Но это не работает ... Есть предложения о том, как это можно сделать?Я уверен, что есть правильный способ сделать это, но я не могу понять это.Должен ли я использовать re?

Ответы [ 8 ]

16 голосов
/ 04 декабря 2010

Если вы хотите использовать только заглавные буквы

>>>line = ' What AboutMe '
>>>filter(str.isupper, line)
'WAM'

А как насчет слов, которые не могут быть заглавными буквами?

>>>line = ' What is Up '
>>>''.join(w[0].upper() for w in line.split())
'WIU'

А как насчет только заглавных слов?

>>>line = ' GNU is Not Unix '
>>>''.join(w[0] for w in line.split() if w[0].isupper())
'GNU'
13 голосов
/ 04 декабря 2010

Попробуйте

print "".join(e[0] for e in x.split())

Ваш цикл фактически проходит по всем символам в строке x. Если вы хотите зациклить слова, вы можете использовать x.split().

5 голосов
/ 04 декабря 2010

Без re:

>>> names = 'Vincent Vega Jules Winnfield'
>>> ''.join(x[0] for x in names.split())
'VVJW'
3 голосов
/ 04 декабря 2010

Теперь что-то немного другое ...

words = "There ain't no such thing as a free lunch."
acronym = ''.join(word[0] for word in words.upper().split())
print acronym
# TANSTAAFL

( TANSTAAFL довольно известный, кстати).

2 голосов
/ 06 декабря 2010

Если вы хотите сделать все так, как грамматически правильно (независимо от локали), используйте title(), затем filter():

acronym = filter(str.isupper, my_string.title())

title() довольно круто; это делает строку titlecased и является правильной в соответствии с локалью.

2 голосов
/ 04 декабря 2010

Также вы можете использовать

re.split('\W')

, чтобы разбить строку / текст на несловарные символы. Это может быть немного более надежным.

2 голосов
/ 04 декабря 2010
s = 'First Second Third'
x = s.split(' ')
for e in x:
    print e[0]

должен добиться цели.

0 голосов
/ 10 сентября 2014

Вот как сделать аббревиатуру с регулярным выражением, оставив цифры как есть:

import re
words = "internet explorer 10"
print re.sub(r"([a-zA-Z])[a-z,A-Z]+\s*",r"\1",words).upper()

IE10

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