регулярное выражение python для проверки типов строк - PullRequest
1 голос
/ 02 февраля 2010

Я хочу сделать следующее с python:

  1. Проверить, является ли строка UTF8 целым числом.
  2. Проверить, является ли строка UTF8 плавающей точкой.
  3. Подтвердить, если длина строки UTF8 (1-255).
  4. Проверить, является ли строка UTF8 действительной датой.

Я совершенно новичок в python и считаю, что это следует делать с помощью регулярных выражений, за исключением, может быть, последнего Ваша помощь приветствуется!

Ответы [ 3 ]

6 голосов
/ 02 февраля 2010

Regex не является хорошим решением здесь.

  1. Проверить, является ли строка UTF8 целым числом:

    try:
      int(val)
      is_int = True
    except ValueError:
      is_int = False
    
  2. Подтвердить, если строка UTF8 является плавающей точкой: то же, что и выше, но с float().

  3. Подтвердить, если длина строки UTF8 (1-255):

    is_of_appropriate_length = 1 <= len(val) <= 255
    
  4. Подтвердить, если строка UTF8 является допустимой датой: это не тривиально. Если вы знаете правильный формат, вы можете использовать time.strptime() следующим образом:

    # Validate that the date is in the YYYY-MM-DD format.
    import time
    try:
      time.strptime(val, '%Y-%m-%d')
      is_in_valid_format= True
    except ValueError:
      is_in_valid_format = False
    

РЕДАКТИРОВАТЬ: Еще одна вещь, чтобы отметить. Поскольку вы специально упоминаете строки UTF-8, имеет смысл сначала декодировать их в Unicode. Это будет сделано:

my_unicode_string = my_utf8_string.decode('utf8')

Интересно отметить, что при попытке преобразовать строку Unicode в целое число, например, используя int(), вы не ограничены цифрами «западно-арабский», используемыми в большинстве стран мира. int(u'١٧') и int(u'१७') будут правильно декодироваться как 17, даже если они являются индуистско-арабскими и девангарскими цифрами соответственно.

2 голосов
/ 02 февраля 2010

Зачем использовать регулярные выражения? Я убежден, что это будет медленнее и громоздче.

Метод int() и float() или, что еще лучше, метод isdigit() хорошо работает здесь.

a = "03523"
a.isdigit()
>>> True

b = "963spam"
b.isdigit()
>>> False

Для вопроса 3 вы имеете в виду « Проверить, если строка UTF8 имеет НОМЕР длины (1-255) »?

Почему бы и нет:

def validnumber(n):
  try:
    if 255 > int(n) > 1:
      return True
  except ValueError:
      return False
1 голос
/ 02 февраля 2010
  1. int () и проверка исключений
  2. float () - но что вы имеете в виду float?
  3. int (), а затем проверьте, если
  4. с использованием форматирования даты и времени
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...