почему line.split ('\ s') не делает то же самое, что line.split ()? - PullRequest
0 голосов
/ 03 марта 2011

У меня есть очень очень простая программа, которая анализирует CSV-файл, содержащий строки текстовых записей, столбцы которых разделены одним символом табуляции.

Я понимаю, что split () по умолчанию разбивает пробел, поэтому явное указание шаблона пробела не требуется, но мой вопрос: почему не работает явно указанный шаблон для пробела? Или '\ s' или r '\ s' не правильный шаблон / регулярное выражение? Я искал в stackoverflow и обнаружил упоминание о том, что string split () является более старым методом, который я не совсем понимаю, так как я очень плохо знаком с python. Разве string split () не поддерживает регулярные выражения?

Вот мой код:

#!/usr/bin/env python
import os
import re
import sys

f = open(sys.argv[1])
for line in f:
    field = line.split()
    field2 = line.split('\s')
    print field[1], field2[1]
f.close

Я попытался сделать line.split (r '\ s'), и это тоже не работает, но line.split ('\ t') работает.

Ответы [ 3 ]

8 голосов
/ 03 марта 2011

Поскольку \t действительно представляет символ табуляции в строке (например, \n является символом новой строки, см. Здесь список допустимых escape-последовательностей ), но \s является специальным класс символов регулярного выражения для пробелов.

str.split [документы] не принимает регулярные выражения.Если вы хотите разделить с помощью регулярных выражений, вы должны использовать re.split [документы] .

Демонстрация:

>>> import re
>>> str = "This\sis a weird\sstring"
>>> str.split("\s")                    # treated literally
['This', 'is a weird', 'string'] 
>>> re.split("\s", str)                # regex
['This\\sis', 'a', 'weird\\sstring']   
1 голос
/ 03 марта 2011

Функция string.split() не принимает параметр регулярного выражения.Попробуйте re.split():

>>> import re
>>> re.split(r"\s+", "a  b")
['a', 'b']
1 голос
/ 03 марта 2011

string.split() принимает строку в качестве аргумента и разбивает на основе этой строки.Это все.\t - это символ табуляции ASCII, а \s - просто \ + s в этом случае.

Для разделения на регулярные выражения вы хотите импортировать re и использовать re.split().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...