On Sun, Dec 29, 2013 at 02:36:32PM +0100, Ulrich Goebel wrote:
> Hallo,
> 
> I have a unicode string s, for example u"abc", u"äöü", u"123" or 
> something else, and I have to find out wether
> 
> 1. s is not empty and contains only digits (as in u"123", but not in 
> u"3.1415")
>
> or
> 
> 2. s is empty or contains only whitespaces
>
> For all other cases I would assume a "normal" unicode string in s, 
> whatever that may be.
> 
> For the first case it could be s.isdigit(), s.isnumeric() or 
> s.isdecimal() - but which one is the best?

Depends what you are trying to do. Only you can decide which is best. 
The three methods do slightly different things:

- isdigit() tests for the digit characters 0...9, or their
  equivalent in whatever native language your computer is 
  using. 

- isdecimal() tests for decimal characters. That includes the
  so-called "Arabic numerals" 0...9 (although the Arabs don't
  use them!) as well as other decimal digits like ٠١٢...

  (The above three are ARABIC-INDIC DIGIT ZERO through TWO.)

- isnumeric() tests for characters which have the Unicode 
  numeric value property. That includes decimal digits, as well 
  as non-digit numbers such as ½ and ¾.


If you want to test for something that a human reader will recognise as 
a "whole number", s.isdigit() is probably the best one to use.


> For the second case it should be s.isspace(), but it works only on 
> strings, not on unicode strings?

What gives you that impression? isspace works on Unicode strings too.

py> '   x'.isspace()
False
py> '    '.isspace()
True

For the second case, you also need to check for empty strings, so you 
should use:

    not s or s.isspace()

which will return True is s is empty or all whitespace, otherwise False.


-- 
Steven
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to