2013-08-16 2 views
1

문자열이 단일 단어인지 확인하는 방법은 무엇입니까?문자열이 단일 단어인지 확인하는 방법은 무엇입니까?

이렇게하는 것이 옳은가요?

set st "some string" 

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

한 단어의 당신의 정의는 무엇인가 : 원하는 정의 경우 반면에

는 다음과 같은 다른 가능성을 가지고 "숫자이다"? 편지는 처음부터 끝까지?한 단어에 대시 (하이픈)를 포함 시키려면 공백을 확인할 수 있지만 '단어'에 대해 좀 더 정교해질 필요가 있다고 생각합니다. – Jerry

+0

문자열을 확인하고 싶습니다. 정확히 한 단어를 포함하고 있습니다 : 그 안에 어떤 문자 (공백 제외). –

+0

좋아요, 그래서 123 %를 "IHDS"라고 기록 할 것입니다. 내 대답을 업데이트했습니다 :) – Jerry

답변

1

답변은 단어에 알파벳 문자 만 포함되어 있다는 가정하에 작성되었습니다. 당신이 어떤 정규 표현식을 사용하여 괜찮다면

, 당신은이를 사용할 수 있습니다

set st "some string" 

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

[정규 표현식 표현 문자열] 0을 반환이 일치하지 않으며 1은 일치하는 항목이있는 경우.

내가 사용하는 표현식은 ^[A-Za-z]+$입니다. 이는 문자열이 문자로 시작하고 임의의 수의 문자를 포함 할 수 있으며 문자로 끝나야 함을 의미합니다. 지금 후행 공백을 걱정하는 경우

^[A-Za-z-]+$

, 내가 먼저 트리밍 제안 : 당신이 내 대시를 포함 할 경우, 문자 클래스에 추가 (예를 들어, 하나 개의 단어가 공동 운영) 직접 정규 표현식 ...

set st " some string " 

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

편집을 사용하려는 경우

set st " some string " 

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

나 : 정규 표현식에 전달하기 전에 단어는 strin으로 간주하는 경우 g를 제외하고는 다른 것을 할 수 있습니다 : 문자열에 공백이 있는지 확인하십시오. 이 공간을 발견하면

set st "some strings" 

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

, 정규 표현식은 1

+0

'A-Za-z'는 스웨덴 알파벳이나' é'. 나는 성을'아만'이라고 생각하고 싶다. 대신'[: alpha :]'를 사용하자. – potrzebie

+0

@potrzebie이 정규 표현식은 '공백을 제외한 모든 문자'확인 이전에 사용되었다. 이 정규식 이외의 알파벳을 취하지 않으면 죄송합니다. ^^; – Jerry

1

regexp\w\W있는 단어와 일치하는 정직 방법을 제공합니다 반환합니다. \w은 단어 문자와 일치하지만 \W을 제외하고 단어 문자와 일치합니다.

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

그러나 \w 일치하는 경우에만 digits, alphabets_ 및 (임의의 조합). 단어에 특수 문자가 있으면 작동하지 않습니다.

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

단어의 은 Tcl 언어 정의입니다 : 문자열을 사용하여 하나 개의 단어 인 경우

+0

이 경우, 단어를 분리하는 데 사용되는 공백 문자 인 '\ s'를 검색하십시오. . –

2

은 하나의 가능한 정의에 따르면, 당신은 확인합니다.

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