Вопрос регулярного выражения Python - PullRequest
1 голос
/ 01 марта 2011

У меня возникли проблемы с поиском решения этой проблемы.

Я хочу прочитать файл из каждой строки и проанализировать, содержит ли эта строка один из двух символов (1 или 0).Затем мне нужно суммировать значение строки, а также найти значение индекса (местоположение) каждого из «1» экземпляров символов.

, например:

 1001

приведет к:

line 1=(count:2, pos:[0,3])

Я пробовал множество вариантов чего-то вроде этого:

r=urllib.urlopen(remote-resouce)
list=[]
for line in lines:
    for m in re.finditer(r'1',line):
        list.append((m.start()))

У меня две проблемы:

1) Я подумал, что лучшим решением было бы перебрать каждую строку, а затем использовать функцию поиска регулярных выражений.Моя проблема заключается в том, что я не могу написать цикл for, который работает.Несмотря на все мои усилия, я продолжаю возвращать результаты в виде одного длинного списка, а не многомерного массива словарей.

Правильный ли этот подход?Если да, то как мне написать правильный цикл?

Если нет, что еще мне попробовать?

Ответы [ 3 ]

4 голосов
/ 01 марта 2011

Возможно, сделайте это без регулярных выражений:

import urllib
url='/6611669/vopros-regulyarnogo-vyrazheniya-python'
f=urllib.urlopen(url)
for linenum,line in enumerate(f):
    print(line)
    locations=[pos for pos,char in enumerate(line) if char=='1']
    print('line {n}=(count:{c}, pos:{l})'.format(
        n=linenum,
        c=len(locations),
        l=locations
        ))
1 голос
/ 01 марта 2011

Использование регулярных выражений здесь, вероятно, плохая идея.Вы можете видеть, находится ли 1 или 0 в строке текста с '0' in line or '1' in line, и вы можете получить счет с помощью line.count('1').

Нахождение всех местоположений 1 sЯ полагаю, что требуется итерация по строке.

0 голосов
/ 01 марта 2011

Код Unubtu работает нормально. Я проверил это на примере файла, который также имеет все 0 для конкретной строки. Вот полный код -


#! /usr/bin/python
  2 
  3 # Write a program to read a text file which has 1's and 0's on each line
  4 # For each line count the number of 1's and their position and print it
  5 
  6 import sys
  7 
  8 def countones(infile):
  9   f = open(infile,'r')
 10   for linenum, line in enumerate(f):
 11     locations = [pos for pos,char in enumerate(line) if char == '1']
 12     print('line {n}=(count:{c}, pos:{l})'.format(n=linenum,c=len(locations),l=    locations))
 13 
 14 
 15 def main():
 16   infile = './countones.txt'
 17   countones(infile)
 18 
 19 # Standard boilerplate to call the main() function to begin the program
 20 if __name__ == '__main__':
 21   main()


Input file -

1001
110001
111111
00001
010101
00000

Result -

line 0=(count:2, pos:[0, 3])
line 1=(count:3, pos:[0, 1, 5])
line 2=(count:6, pos:[0, 1, 2, 3, 4, 5])
line 3=(count:1, pos:[4])
line 4=(count:3, pos:[1, 3, 5])
line 5=(count:0, pos:[])
...