如何检查字符串是单个单词?

时间:2013-08-16 09:44:17

标签: tcl

如何检查该字符串是一个单词?

这是正确的方法吗?

set st "some string"

if { [llength $st] != 1 } {
   puts "error"
}

3 个答案:

答案 0 :(得分:2)

根据一个可能的定义,您可以使用以下方法检查字符串是否为一个单词:

catch {set oneWord 0;set oneWord [expr {[llength $string] == 0}]}

这是单词的 Tcl语言定义。

另一方面,如果您的首选定义是“字母数字”,那么您还有其他可能性,例如:

# -strict excludes the empty string (normally included for historic reasons)
set oneWord [string is alnum -strict $string]

答案 1 :(得分:1)

我的回答是基于一个单词只包含字母字符的假设。

如果您不介意使用某些正则表达式,可以使用:

set st "some string"

if { ![regexp {^[A-Za-z]+$} $st] } {
   puts "error"
}

[regexp 表达式 字符串]如果没有匹配则返回0,1表示匹配。

我使用的表达式是^[A-Za-z]+$,这意味着字符串以字母开头,可以包含任意数量的字母,并且必须以字母结尾。如果你想在里面包含一个破折号(例如合作是一个单词),你可以在角色类中添加它:

^[A-Za-z-]+$

如果您现在担心尾随空格,我会建议先将其修改为正则表达式之前:

set st "  some string  "

if { ![regexp {^[A-Za-z]+$} [string trim $st]] } {
   puts "error"
}

或者如果你想直接使用正则表达式...

set st "  some string    "

if { ![regexp {^\s*[A-Za-z]+\s*$} $st] } {
   puts "error"
}

编辑:如果某个单词被视为除空格之外的字符串,您可以执行其他操作:检查该字符串是否包含空格。

set st "some strings"

if { [regexp { } $st] } {
   puts "error"
}

如果找到空格,则regexp将返回1.

答案 2 :(得分:1)

regexp提供了一种将单词与\w\W匹配的直接方式。 \w匹配单词字符,而\W匹配任何字符单词字符。

set st "some string"
if { [regexp {\W} $st] } {
   puts "error"
}

\w仅匹配digitsalphabets_(任意组合)。如果您的单词中有特殊字符,则无效。