Ответ 1
Смотрите в действии:
matchObj = re.search("^(?!OK|\\.).*", item)
Не забудьте поставить .*
после отрицательного внешнего вида, иначе вы не смогли бы получить никакого соответствия; -)
У меня есть следующий ввод,
OK SYS 10 LEN 20 12 43
1233a.fdads.txt,23 /data/a11134/a.txt
3232b.ddsss.txt,32 /data/d13f11/b.txt
3452d.dsasa.txt,1234 /data/c13af4/f.txt
.
И я хотел бы извлечь весь вход, кроме строки, содержащей
"OK SYS 10 LEN 20
" и последняя строка, содержащая один "."
(точка).
То есть, я хочу извлечь следующие
1233a.fdads.txt,23 /data/a11134/a.txt
3232b.ddsss.txt,32 /data/d13f11/b.txt
3452d.dsasa.txt.1234 /data/c13af4/f.txt
Я попробовал следующее:
for item in output:
matchObj = re.search("^(?!OK) | ^(?!\\.)", item)
if matchObj:
print "got item " + item
но он не работает, поскольку он не производит никакого вывода.
Смотрите в действии:
matchObj = re.search("^(?!OK|\\.).*", item)
Не забудьте поставить .*
после отрицательного внешнего вида, иначе вы не смогли бы получить никакого соответствия; -)
if not (line.startswith("OK ") or line.strip() == "."):
print line
Используйте отрицательное совпадение. (Также обратите внимание, что пробелы значительны по умолчанию внутри регулярного выражения, поэтому не занимайте места. В качестве альтернативы используйте re.VERBOSE.)
for item in output:
matchObj = re.search("^(OK|\\.)", item)
if not matchObj:
print "got item " + item
Почему вы не соответствуете строке OK SYS и не возвращаете ее.
for item in output:
matchObj = re.search("(OK SYS|\\.).*", item)
if not matchObj:
print "got item " + item
Если это файл, вы можете просто пропустить первую и последнюю строки и прочитать остальные с помощью csv
:
>>> s = """OK SYS 10 LEN 20 12 43
... 1233a.fdads.txt,23 /data/a11134/a.txt
... 3232b.ddsss.txt,32 /data/d13f11/b.txt
... 3452d.dsasa.txt,1234 /data/c13af4/f.txt
... ."""
>>> stream = StringIO.StringIO(s)
>>> rows = [row for row in csv.reader(stream,delimiter=',') if len(row) == 2]
>>> rows
[['1233a.fdads.txt', '23 /data/a11134/a.txt'], ['3232b.ddsss.txt', '32 /data/d13f11/b.txt'], ['3452d.dsasa.txt', '1234 /data/c13af4/f.txt']]
Если это файл, вы можете сделать это:
with open('myfile.txt','r') as f:
rows = [row for row in csv.reader(f,delimiter=',') if len(row) == 2]
and(re.search("bla_bla_pattern", str_item, re.IGNORECASE) == None)
работает.