【问题标题】:Python create acronym from first characters of each word and include the numbersPython从每个单词的第一个字符创建首字母缩写词并包含数字
【发布时间】:2018-03-01 16:43:28
【问题描述】:

我有一个字符串如下:
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' 也是如此。蒂亚!

【问题讨论】:

  • 是否有可能连续出现多个大写字母,例如AMC Loews Uptown 1?期望的输出是什么? IMAX 也是如此

标签: python regex elements capture


【解决方案1】:

See regex in use here

(?:(?<=\s)|^)(?:[a-z]|\d+)
  • (?:(?&lt;=\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

【讨论】:

  • 更新了接受的答案,因为我终于把所有这些放在一起,我发现了一些更强大的极端案例!
【解决方案2】:

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

正则表达式[a-z ]+

详情:

  • []+ 匹配列表中存在的单个字符,介于 1 和 无限次

Python 代码

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

输出:RCCS14

Code demo

【讨论】:

  • 优雅的解决方案,简单的解释!先生,我向您致敬!
【解决方案3】:

由于我没有足够的声誉,我无法发表评论,但是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

【讨论】:

  • 通常,您只需链接到同一页面上的答案。我已经改变了我的答案,因为它更有效地对抗可能出现在文字中的 '- 之类的东西。链接到现有答案可确保您始终使用最新版本 :) 如果答案不在 StackOverflow 范围内,则您可以复制内容。
  • 感谢您的评论,请随时将我的评论添加到您的答案中,我将删除我的帖子:)
【解决方案4】:
import re
theatre = 'Regal Crown Center Stadium 14'
r = re.findall("\s(\d+|\S)", ' '+theatre)
print(''.join(r))

给我RCCS14

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-14
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2016-12-05
    • 2015-11-10
    相关资源
    最近更新 更多