Python 在字符串中查找大写首字母缩略词

Python 在字符串中查找大写首字母缩略词,python,string,loops,uppercase,Python,String,Loops,Uppercase,我试图在字符串中找到大写首字母缩写词。例如,如果输入是“我需要尽快见你,因为YOLO,你知道”应该返回[“尽快”,“YOLO”] 我试图去掉标点符号,然后在字符串中循环,当它是大写字母时,将字母打印出来。这导致了一个无限循环。我想用字符串操作来解决这个问题,所以没有正则表达式 编辑: 更改删除标点符号以提高效率 发件人: 致: 在这方面,这应该是可行的: def acronyms(x): ans = [] y = x.split(" ") for i in y:

我试图在字符串中找到大写首字母缩写词。例如,如果输入是“我需要尽快见你,因为YOLO,你知道”应该返回[“尽快”,“YOLO”]

我试图去掉标点符号,然后在字符串中循环,当它是大写字母时,将字母打印出来。这导致了一个无限循环。我想用字符串操作来解决这个问题,所以没有正则表达式

编辑

  • 更改删除标点符号以提高效率
  • 发件人:

    致:

    在这方面,这应该是可行的:

    def acronyms(x):
      ans = []
      y = x.split(" ")
      for i in y:
        if i.isupper():
          ans += [i]
      return ans
    

    isupper()返回
    True
    ,只要没有小写字母,即使有标点符号

    您的while循环在第一个字符上迭代,但从不中断以转到下一个字符

    您还需要过滤掉“I”,因为单个字母通常不会被归类为首字母缩略词

    string.isupper()
    函数检查整个字符串而不是单个字符,因此我建议您使用它。它看起来是这样的:

    def首字母缩略词:
    words=s.split()
    首字母缩略词=[]
    用文字表示:
    如果word.isupper()和len(word)>1:
    缩略语。附加(单词)
    返回首字母缩略词
    
    我想指出几件事。首先,你的程序被挂起了,因为你有一个
    while True
    ,而没有一个
    break
    。然后,当您执行
    n+=1
    时,您会使
    枚举变得毫无意义

    for i, x in enumerate(s):
        n+=1
    
    这一切都可以很容易地简化,无需
    枚举

    def acronyms(s):
    
        exclude = set(string.punctuation)
        s = "".join(ch for ch in s if ch not in exclude)
        acro = [x for x in s.split() if x.isupper()]
        return acro
    
    输出

    ['I', 'ASAP', 'YOLO']
    
    不幸的是,我们确实有一个额外的
    I
    ,它恰好不是首字母缩写,因此一个修复方法是确保
    x
    在被附加之前从来不是一个字母

    acro = [x for x in s.split() if x.isupper() and len(x) != 1]
    

    我强烈推荐使用
    nltk
    ,因为它的出色的标记化包,它可以出色地处理边缘情况和标点符号

    对于将首字母缩略词定义为以下内容的简化方法:

    • 所有字符都按字母顺序排列
    • 所有字符都是大写的
    以下内容应足够:

    从nltk.tokenize导入单词\u tokenize
    def get_首字母缩略词(文本):
    返回[
    word_tokenize(文本)中令牌的令牌
    if-token.isupper()
    ]
    
    在OP代码上构建很好,但是我真的认为使用
    s.split()
    exclude
    对象不是一个好方法。它完成了任务,但还远远没有产生一个强大的团队tokenisation@Matt不是那个家伙,但堆栈溢出不是为Pople编写完整代码的地方。通过给人们完整的答案,他们不会从中学到什么。我尝试实现了这一点,一些答案产生了一个元组而不是字符串,所以我将尝试找到一种方法来修复它
    def acronyms(s):
    
        exclude = set(string.punctuation)
        s = "".join(ch for ch in s if ch not in exclude)
        acro = [x for x in s.split() if x.isupper()]
        return acro
    
    ['I', 'ASAP', 'YOLO']
    
    acro = [x for x in s.split() if x.isupper() and len(x) != 1]