Regex + Python для удаления определенных конечных и конечных символов из значения в файле с разделителями табуляции - PullRequest
0 голосов
/ 06 марта 2010

Прошли годы (и годы) с тех пор, как я выполнил какое-либо регулярное выражение, поэтому обращайтесь к экспертам здесь, поскольку это, вероятно, тривиальное упражнение:)

У меня есть файл с разделителями табуляции и в каждой строке у меня естьопределенные поля со значениями, такими как:

  • foo
  • bar
  • b "foo's bar"
  • b'bar foo '
  • b'carbar '

(Полная строка в файле может выглядеть примерно так:

123 \ t b'bar foo' \tabc \ t123 \ r \ n

Я хочу избавиться от всех ведущих b ', b "и завершающих", "из этого поля в каждой строке. Так что, приведенный выше пример строки после выполнения регулярного выраженияЯ бы получил:

123 \ t bar foo \ tabc \ t123 \ r \ n

Бонусные баллы, если вы можете дать мне пиктограмму для запуска этогоповерх файла.

Ответы [ 3 ]

1 голос
/ 06 марта 2010

для каждой строки вы можете использовать

re.sub(r'''(?<![^\t\n])\W*b(["'])(.*)\1\W*(?![^\t\n])''', r'\2', line)

и для бонусных баллов:

import re

pattern = re.compile(r'''(?<![^\t\n])\W*b(["'])(.*?)\1\W*?(?![^\t\n])''')
with open('outfile', 'w') as outfile:
    for line in open('infile'):
        outfile.write(pattern.sub(r'\2', line))
1 голос
/ 06 марта 2010

(^ | \ т) Ь [\ " '] должны соответствовать указаниям, а для трейлинга:

\ "» должен сделать это

В Python вы делаете:

import re
r1 = re.compile("(^|\t)b[\"']")
r2 = re.compile("[\"'](\t|$)")

тогда просто используйте

r1.sub("\\1", yourString)
r2.sub("\\1", yourString)
0 голосов
/ 06 марта 2010
>>> "b\"foo's bar\"".replace('b"',"").replace("b'","").rstrip("\"'")
"foo's bar"
>>> "b'bar foo'".replace('b"',"").replace("b'","").rstrip("\"'")
'bar foo'
>>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...