Как я могу выполнить регулярное выражение в Python? - PullRequest
0 голосов
/ 01 марта 2012

Я использую Python для создания файла Excel из файла CSV. Я пытаюсь получить его, где, если данные для ячейки начинаются с "=", а затем распечатать как функцию в Excel ... но мне не повезло Я попытался выполнить регулярное выражение для строки, чтобы увидеть, начинается ли она с "=", но это не работает. Вот что у меня есть в Python:

import xlwt
import re

string = '=HYPERLINK("http://www.google.com";"Google")'

if re.match("^=", string) == True:
    formData = re.sub('=', '', string)
    sheet.write(row_count,col-1, Formula("'" + formDta + "'"),style)

Это неправильный подход, или у меня просто неправильный синтаксис? Любые предложения о том, как я могу сделать эту работу?

Ответы [ 3 ]

1 голос
/ 01 марта 2012

Проблема в том, что вы сравниваете с True. Python True является логическим объектом. re.match() возвращает объект match. Когда Python сравнивает их, типы не совпадают, и тест if не проходит.

Идиоматический способ сделать тест регулярного выражения в python - это:

if re.match(regexp, string):

Python рассматривает большинство не False, не None значений как истинные для целей if и while испытаний. Приведенный выше код использует это поведение - если регулярное выражение совпадает, возвращается объект match, и тест проходит. Если регулярное выражение не совпадает, возвращается None и тест не пройден.

1 голос
/ 01 марта 2012

Вам не нужно регулярное выражение для этого. Что-то вроде: if string.startswith('='): do something было бы хорошо.

Тем не менее, вот выдержка из документации Python для модуля re :

Python предлагает две различные примитивные операции, основанные на регулярных выражениях: проверка на совпадение только в начале строки, а поиск проверяет совпадение в любом месте строки (это то, что Perl делает по умолчанию).

То есть, если вы используете re.match(), привязка начала строки ^ не обязательна.

РЕДАКТИРОВАТЬ: @aix правильно о поведении re.match() - он будет сопоставлять шаблон только со всей строкой (не ее частью.)

0 голосов
/ 01 марта 2012
s = '=HYPERLINK("http://www.google.com";"Google")'

if s.startswith('='):
   ...

Причина, по которой ваш код не работает, заключается в том, что re.match() возвращает True, только если вся входная строка соответствует регулярному выражению. В вашем случае, только первый персонаж делает. Вы можете использовать re.search() или изменить регулярное выражение на "^=.*". Тем не менее, я думаю, что startswith() - лучший подход.

P.S. Я переименовал вашу переменную, чтобы она не затеняла стандартный модуль string.

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