Python从每个单词的第一个字符创建首字母缩略词并包含数字

时间:2018-03-01 16:43:29

标签: python regex elements capture

我有一个字符串如下:
theatre = 'Regal Crown Center Stadium 14'

我想把它打成一个基于每个单词中第一个字母的首字母缩略词,但也包括两个数字:
期望的输出= 'RCCS14'

我的代码尝试如下:
acronym = "".join(word[0] for word in theatre.lower().split()) acronym = "".join(word[0].lower() for word in re.findall("(\w+)", theatre)) acronym = "".join(word[0].lower() for word in re.findall("(\w+ | \d{1,2})", theatre)) acronym = re.search(r"\b(\w+ | \d{1,2})", theatre)

我最终得到的结果是:rccs1但似乎无法捕获最后一个数字。可能存在这个数字位于名称中间的情况:'Regal Crown Center 14 Stadium'。 TIA!

4 个答案:

答案 0 :(得分:2)

See regex in use here

(?:(?<=\s)|^)(?:[a-z]|\d+)
  • (?:(?<=\s)|^)确保前面的空格或行的开头
  • (?:[a-z]|\d+)匹配一个字母或一个或多个数字

i标志(python中的re.I)允许[a-z]匹配其大写变体。

See code in use here

import re

r = re.compile(r"(?:(?<=\s)|^)(?:[a-z]|\d+)", re.I)
s = 'Regal Crown Center Stadium 14'

print(''.join(r.findall(s)))

上面的代码找到了正则表达式匹配的所有实例,并将列表项连接成一个字符串。

结果:RCCS14

答案 1 :(得分:1)

您可以使用re.sub()删除所有小写字母和空格。

正则表达式[a-z ]+

详细说明:

  • []+将列表中的单个字符与1和 无限次

Python代码

re.sub(r'[a-z ]+', '', theatre)

输出:RCCS14

Code demo

答案 2 :(得分:0)

我无法发表评论,因为我没有足够的声誉,但 S. Jovan 答案并不令人满意,因为它假设每个单词都以大写字母开头,并且每个单词都有一个且只有一个大写字母。

re.sub(r'[a-z ]+', '', "Regal Crown Center Stadium YB FIEUBFB DBUUFG FUEH  14")

将返回'RCCSYBFIEUBFBDBUUFGFUEH14'

然而 ctwheels 答案将能够在这种情况下起作用:

r = re.compile(r"\b(?:[a-z]|\d+)", re.I)
s = 'Regal Crown Center Stadium YB FIEUBFB DBUUFG FUEH  14'

print(''.join(r.findall(s)))

将打印

RCCSYFDF14

答案 3 :(得分:0)

import re
theatre = 'Regal Crown Center Stadium 14'
r = re.findall("\s(\d+|\S)", ' '+theatre)
print(''.join(r))

给我RCCS14