【问题标题】:Find alphabetic words [closed]查找字母词[关闭]
【发布时间】:2012-11-10 18:48:39
【问题描述】:

我需要编写函数,例如检查单词是否按字母顺序排列

my_function('Hello!')
>> True
my_function('How')
>> True
my_function('F!@K')
>> False
my_function('</html>')
>> False

我不知道。我在re lib 中真的很糟糕。

begin_searcher = re.compile(r'[\w\-]')
end_searcher = re.compile(r'[\w\-]+[!-?]')

我不能使用非标准库

【问题讨论】:

  • -1。这个问题表明没有尝试自己解决这个问题。
  • 为什么Hello! 是“字母”而&lt;/html&gt; 不是?
  • 因为结尾带有?! 的任何单词都是按字母顺序排列的
  • 你能详细说明你对“字母”的定义吗?它可以以 ?或!,但还有什么?它可以有几个标点符号或其他标点符号('a!!!','oh.'...)?里面可以有空格或标点符号吗? ...
  • 里面没有空格或标点符号,可以以',.!?'结尾与'!!!!??' , '?!' , '.....' , '.', ',' 之类的组合

标签: python regex python-3.x


【解决方案1】:

非正则表达式解决方案

from string import ascii_letters
def foo(st):
    letters = ascii_letters
    letters_nd_term = letters + "?!"
    return not any([set(st[:-1]).difference(letters),st[-1] not in letters_nd_term])

【讨论】:

    【解决方案2】:

    您必须更好地定义“词”是什么。如果 !和 ?一个词的结尾都可以,那怎么办。和 , 和 ;和:等?

    下面是一些可以解决问题的方法:

    >>> import re
    >>> pat = re.compile('[a-zA-Z]+[.,!?]?')
    >>> m = pat.match(word) #where word is what you're checking
    >>> True if m else False
    

    当然,这不包括用引号括起来的单词,或单词末尾的多个标点符号,或所有类型的标点符号。但它应该为您提供一个很好的起点,让您了解什么是“单词”。

    【讨论】:

      【解决方案3】:

      最好使用集合而不是正则表达式:

      >>> import string
      >>> letters = set(string.ascii_letters)
      >>> def is_alpha(word):
          return set(word).issubset(letters)
      
      >>> for wrd in 'Hello! Hello How F!@K </html>'.split():
          print("is_alpha(%r) == %r" % (wrd, is_alpha(wrd)))
      
      
      is_alpha('Hello!') == False
      is_alpha('Hello') == True
      is_alpha('How') == True
      is_alpha('F!@K') == False
      is_alpha('</html>') == False
      >>> 
      

      【讨论】:

        猜你喜欢
        • 2013-04-24
        • 2020-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-07
        • 2013-02-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多