如何检查该字符串是一个单词?
这是正确的方法吗?
set st "some string"
if { [llength $st] != 1 } {
puts "error"
}
根据一种可能的定义,您可以使用以下方法检查字符串是否为一个单词:
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]
我的回答是基于一个单词只包含字母字符的假设。
如果你不介意使用一些正则表达式,你可以使用这个:
set st "some string"
if { ![regexp {^[A-Za-z]+$} $st] } {
puts "error"
}
[regexp表达式 字符串] 如果没有匹配则返回 0,如果有匹配则返回 1。
我使用的表达式是^[A-Za-z]+$
表示字符串以字母开头,可以包含任意数量的字母,并且必须以字母结尾。如果你想在里面包含一个破折号(例如 co-operate 是一个单词),你可以在字符类中添加它:
^[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"
}
如果找到空格,正则表达式将返回 1。
regexp
提供了一种直接的方式来匹配一个单词\w
和\W
。\w
匹配单词字符,而\W
匹配除单词字符之外的任何字符。
set st "some string"
if { [regexp {\W} $st] } {
puts "error"
}
但是\w
仅匹配digits
,alphabets
和_
(任意组合)。如果您的单词中有特殊字符,这将不起作用。