2013-10-01 3 views
-5

Привет, ребята У меня вопрос о регулярном выражении, мне нужна помощь litle о чем-то. Мой код выглядит следующим образом:Python regex on текстовый файл

# -*- coding: utf-8 -*- 
import re 

WEEKDAYS = ["nedjelja", "utorak", "četvrtak", "ponedjeljak", "subota", "srijeda", "petak"]: 

with open('natio_geo_channel.xml', 'r') as input_file, \ 
     open('nat.xml', 'w') as output_file: 
    for line in input_file: 
     for x in WEEKDAYS 
      line = line.replace("<para>" + x, "<date>") 
     line = re.sub(r"<para>\d{0}", "<start>", line) 
     line = re.sub(r"<start>\d{2}\.\d{2}\s/\s/", "</start>", line) 
     output_file.write(line) 

Мой файл выглядит следующим образом:

<para>nedjelja1. rujna 2013.</para> 
    <para>06.00        na hrvatskom Zona gradnje: Izgradnja zelenog Pekinga</para> 
    <para>Kineske nevolje sa zagađenjem problem su s globalnim posljedicama. Pratite ekipu zelenih inženjera koji grade energetski učinkoviti Peking.</para> 

То, что я сделал, я заменил сначала и в нем удалить Nedjelja тот хорошо. Но как я могу это сделать:

<start>06:00<start><title>Zona gradnje</title><sub>Izgradnja zelenog Pekinga</sub> 

из этого <para>06.00 na hrvatskom Zona gradnje: Izgradnja zelenog Pekinga</para>

Можете ли вы дать мне несколько советов или мыслительные путь?

+0

Так как именно это фрагмент кода, и один фрагмент XML, связанные с вашим вопросом ? –

+0

Используйте синтаксический анализатор XML, например. встроенный ElementTree, и манипулировать DOM. Не используйте regex для анализа XML. – l4mpi

+0

Пожалуйста, не комментируйте, если вы не знаете, что я делаю. Это не xml, это был .doc (word) doc, я не знаю ни одного преобразователя, который может конвертировать .doc в csv или xls. – Car

ответ

1

Пожалуйста, попробуйте следующее:

def main():  
    line = r'<para>06.00  na hrvatskom Zona gradnje: Izgradnja zelenog Pekinga</para>'   
    if re.search(r'^(<para>)\d{2}.\d{2}', line): 
     line_time = re.findall(r'\d{2}.\d{2}',line)[0]  
     line_title = line[line.find(re.findall(r'[A-Z]',line)[0]):line.find(':')]   
     line_sub = line[line.find(':')+1:line.find(r'</')].strip() 

     print '<start>'+line_time+'</start><title>'+line_title+'</title><sub>'+line_sub+'</sub>' 

Позвольте мне знать, если это то, что вам нужно.

ВЫВОД

<start>06.00</start><title>Zona gradnje</title><sub>Izgradnja zelenog Pekinga</sub> 

Используйте это для чтения строки из файлов:

with open(r'D:\Trading\PythonScholar\input\input.tx','r') as file: 
     for line in file:    
      if re.search(r'^(<para>)\d{2}.\d{2}', line.strip()): 
       line_time = re.findall(r'\d{2}.\d{2}',line)[0] 
       line_title = line[line.find(re.findall(r'[A-Z]',line)[0]):line.find(':')] 
       line_sub = line[line.find(':')+1:line.find(r'</')].strip() 
       print '<start>'+line_time+'</start><title>'+line_title+'</title><sub>'+line_sub+'</sub>' 

Надеется, что это помогает.

+0

Thx man ill try, главная проблема в том, что это был первый .doc (word), я преобразовал это в xml coz, его быстро для регулярного выражения. Я знаю, для ETtree, но он не поможет мне сейчас, только xls-t поможет. Я стараюсь с этим. Большое спасибо! – Car

+0

Я хочу сказать THX, чтобы помочь мне! Этот код выше работал! – Car

+0

Приветствую, мой друг ... :) – Vivek

1

Для преобразования:

<para>06.00  na hrvatskom Zona gradnje: Izgradnja zelenog Pekinga</para> 

Для этого:

<start>06:00<start><title>Zona gradnje</title><sub>Izgradnja zelenog Pekinga</sub> 

ли это:

str = re.sub(".*?>(\S+)(?:\s+\S+){2}\s+(.*?):\s*(.*)<.*", 
    "<start>\1<start><title>\2</title><sub>\3</sub>", str) 
+0

Всегда любите использование RE. +1 от меня @Bohemian, спасибо за это. – Vivek

Смежные вопросы