1

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

这是正确的方法吗?

set st "some string"

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

3 回答 3

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]
于 2013-08-16T12:40:11.737 回答
1

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

如果你不介意使用一些正则表达式,你可以使用这个:

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。

于 2013-08-16T10:14:40.490 回答
1

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

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

但是\w仅匹配digits,alphabets_(任意组合)。如果您的单词中有特殊字符,这将不起作用。

于 2013-08-16T10:56:05.940 回答