如何检查该字符串是一个单词?
这是正确的方法吗?
set st "some string"
if { [llength $st] != 1 } {
puts "error"
}
答案 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
仅匹配digits
,alphabets
和_
(任意组合)。如果您的单词中有特殊字符,则无效。