Python: регулярное выражение и длина строки в байтах - PullRequest
1 голос
/ 01 июля 2011

Я пишу программу на python и у меня возник вопрос (я на 100% новичок в python):

import re

rawData = '7I+8I-7I-9I-8I-'

print len(rawData)

rawData = re.sub("[0-9]I\+","",rawData)
rawData = re.sub("[0-9]I\-","",rawData)

print rawData
  1. Как объединить 2 регулярных выражения в одно с помощью |? Это означает, что он избавится от 9I- и 9I+, используя всего одну операцию регулярного выражения.
  2. Возвращает ли len (rawData) длину rawData в байтах?

Спасибо.

Ответы [ 3 ]

5 голосов
/ 01 июля 2011

вижу разницу:

$ python3
Python 3.1.3 (r313:86834, May 20 2011, 06:10:42) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> len('día')   # Unicode text
3
>>> 

$ python
Python 2.7.1 (r271:86832, May 20 2011, 17:19:04) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> len('día')   # bytes
4
>>> len(u'día')  # Unicode text
3
>>>


Python 3.1.3 (r313:86834, May 20 2011, 06:10:42) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> len(b'día')
  File "<stdin>", line 1
SyntaxError: bytes can only contain ASCII literal characters.
>>> len(b'dia')
3
>>> 
0 голосов
/ 01 июля 2011

Почему бы вам не выбрать другой подход.С заменить метод?

0 голосов
/ 01 июля 2011

len относится к количеству символов применительно к строке Unicode (это нюанс, другие ответы сбрасывают это больше), байтов в закодированной строке, элементов в списке (или наборе или ключи в словаре) ...

rawData = re.sub("[0-9]I(\+|-)","",rawData)
...