确定输入中的字符串是否是Python中的单个单词

Ein*_*nar 1 python string

我被迫使用的脑死亡第三方程序决定了如何处理路径,具体取决于提供的输入是单个字还是完整路径:在前一种情况下,路径是相对于某个模糊的根目录进行解释的.

因此,假设输入可以是完整或相对路径,或单个单词(包括下划线和短划线,但不是空格),我想知道如何编写一个函数来确定输入是否是单个"单词"定义如上.

例如:

  • "Public_345"将被归类为有效的"单词"
  • "/ home/path/to/something"显然不会
  • "Foo bar"也不会被视为有效的"单词"

由于字符串方法不正常,我想知道是否可以使用正则表达式.最初我想到了这样的事情:

match = re.compile(r"[\w-]+")
word = "abdcde_-4"
if len(re.findall(match, word)) == 1:
    print "Single word"
Run Code Online (Sandbox Code Playgroud)

然而,它确实感觉非常难看,而且我很确定它不会发现角落的情况.那边有(很多)更好的解决方案吗?

liw*_*iwp 5

您可以调整正则表达式以匹配整个输入字符串,这样您就不必计算匹配项.即

if re.match(r'\A[\w-]+\Z', word):
  print "Single word"
Run Code Online (Sandbox Code Playgroud)

(如果你有这种倾向,请编译正则表达式)

\A并分别\Z匹配输入字符串的开头和结尾.因此,如果word除了路径之外还包含其他数据,则上述方法不起作用.