2013-08-16 39 views
1

如何檢查該字符串是單個單詞?如何檢查字符串是單個單詞?

這是正確的方法嗎?

set st "some string" 

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

什麼是你一個字的定義是什麼?只有字母從頭到尾?如果你想在一個單詞中包含破折號(連字符),你可以檢查空格,如果是的話,但我認爲你需要更詳細地描述什麼是'單詞':) – Jerry

+0

我想檢查字符串只包含一個單詞:包含任何字符(空格除外)。 –

+0

好吧,所以你會計算「123%?」IHDS「作爲一個單詞,我已經更新了我的答案:) – Jerry

回答

1

我的答案是基於一個字只包含字母字符的假設。如果沒有匹配,1是有匹配

set st "some string" 

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

[正則表達式表達]返回0:

如果你不介意使用正則表達式的一些,你可以用這個。

我使用的表達式是^[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" 
} 

如果找到一個空間,正則表達式將返回1

+0

」A-Za-z「不會匹配例如瑞典語字母表中的」ääö「 é'。我想認爲我的姓'Åhman'是一個詞,用'[:alpha:]'代替 – potrzebie

+0

@potrzebie這個正則表達式在'除空格外的所有字符'確認和考慮之前如果我冒犯你沒有在這個範圍以外的字母^^; – Jerry

1

regexp提供了直接的方式,以配合\w\W一個字。 \w匹配一個單詞字符,而\W匹配任何字符,除了一個單詞字符。

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

然而\w比賽僅digitsalphabets_(以任何組合)。如果您的文字中出現特殊字符,這將不起作用。

+0

在這種情況下,搜索'\ s' - 一個空白字符,通常用於分割字詞。 –

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] 
相關問題