判断输入字符串是否为单词在Python中
有一个我不得不使用的第三方程序,它的处理方式很死板,决定路径的方式取决于输入是一个单词还是一个完整路径:如果是单词,它会相对于某个不太明确的根目录来解释路径。
所以,考虑到输入可以是完整路径、相对路径,或者是一个单词(包括下划线和短横线,但不包括空格),我在想怎么写一个函数来判断输入是否是上面定义的“单词”。
举个例子:
- "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"
不过,这个方法看起来非常糟糕,而且我很确定它不能处理一些特殊情况。有没有更好的解决方案呢?
4 个回答
0
查看一下os.path模块。你可以使用 os.path.abspath() 这个函数,把一个路径转换成完整的路径(前提是它在同一个系统上)。
你可以用下面这段代码来检查一个字符串里是否有空格字符。
if(str.split()[-1] == str) return True
3
这段代码的意思是……
首先,它定义了一些变量,这些变量就像是用来存储信息的盒子。你可以把它们想象成你在写作业时用来记录答案的地方。
接着,代码中会有一些操作,比如说加法、减法等,这些操作就像是在对这些盒子里的信息进行计算。
最后,代码会输出结果,也就是把计算的答案显示出来,就像是你完成作业后把答案写在纸上一样。
总的来说,这段代码就是在做一些简单的计算和信息处理,最终把结果展示给你。
>>> r="Foo bar".split()
>>> if len(r) != 1: print "not ok"
...
not ok
>>> if "/" in "/home/path/to/something":
... print "ok"
...
ok
6
你可以调整一下你的正则表达式,让它匹配整个输入字符串,这样就不需要去数匹配的次数了。也就是说:
if re.match(r'\A[\w-]+\Z', word):
print "Single word"
(如果你愿意,可以编译一下这个正则表达式)
\A
和 \Z
分别用来匹配输入字符串的开头和结尾。所以,如果你的 word
里面除了路径还有其他数据的话,上面的做法就不适用了。