Some HAT...

= Анабар.ru => Python-форумы => Язык программирования Python => сообщение 739
| Вход | Регистрация
нет
фото
Автор:  Anabar
Дата:  9-Dec-2005 13:31 (gmt = -3.0)

А какая именно цель? Найти первое вхождение или все?

Вот вам некий пример кода. Вашего, но модифицированного немного.

 1  #!/usr/bin/env python
 2  #-*- coding: koi8-r -*-   
 3  # эта вторая (или возможно первая) строчка обязательна. Нужно подсказать Питону, 
 4  # в какой кодировке вы работате. Даже если это utf-8
 5  
 6  import re
 7  inp_file=open('xian2.txt')
 8  cur_line=unicode(inp_file.read(),'utf-8')
 9  # не смотря на то что переменная нахывается cur_line
10  # считывается весь файл. Для одной строки нужно использовать readline(), но Вам виднее
11  
12  rxFndSpAndSym=re.compile("\s\w",re.U)
13  # Здесь надо быть внимательным, т.к. \w в юникоде работет похитрее
14  #When the LOCALE and UNICODE flags are not specified, matches any alphanumeric 
15  #character and the underscore; this is equivalent to the set [a-zA-Z0-9_]. 
16  #With LOCALE, it will match the set [0-9_] plus whatever characters are defined
17  #as alphanumeric for the current locale. If UNICODE is set, this will match the 
18  #characters [0-9_] plus whatever is classified as alphanumeric in the Unicode 
19  #character properties database. 
20  
21  found=rxFndSpAndSym.search(cur_line)
22  out_line=found.string.encode('utf-8')
23  #вот именно тут и непонятно, что именно Вы хотели
24  # Для того чтоб найти все вхождения, удовлетворяющие вашему регэкспу, стоит написать примерно так
25  
26  patResList = re.findall( rxFndSpAndSym, cur_line ) # так получается список всех 
27  #непекрывающихся вхожнений (они в юникоде, кстати)
28  print len(patResList)
29  print patResList
30  
31  for el in patResList:
32      print "pattern ='%s'" % el
33  
34  # ну, допустим теперь нужно записать второе вхождение (если оно было)
35  if len(patResList) > 1:
36      out_file=open('xian3.txt','w')
37      out_file.write(patResList[1]) # он в юникоде
38      out_file.close() # скобки не забывайте здесь
39  else:
40      print 'second pattern hasn\'t been matched'
41  
42  raw_input('\n\n\t\tpress Ctrl+Alt+Shift+Insert+F11...') 



все сообщения ветви:

Недостаточно прав для написания ответа
Время генерации страницы в секундах: 0.195