Регулярные выражения: распечатать последний в группе - PullRequest
0 голосов
/ 17 ноября 2011

Я написал скрипт, чтобы найти определенную строку и напечатать определенное вхождение. Это работало очень хорошо, пока группы не стали неопределенной длины, и мне просто нужно напечатать последнюю. Мне было бы любопытно узнать, что такое find2.group и found3.group, если бы был способ напечатать только последний результат.

f = open ("CompTime.csv","w")
for infile in glob.glob( os.path.join(dir, '*.out') ):
    file_handler = open(infile, "r")
    content = file_handler.read()
    file_handler.close()
    #Find Real Time
    found2 = re.search(' REAL TIME  *.+', content)
    rtime = found2.group(0)[1:-1]
    #Find CPU Time
    found3 = re.search(' CPU TIMES  *.+', content)
    ctime = found3.group(0)[1:-1]
    #Create and Format the results.
    tResult = str(rtime)+','+str(ctime)
    f.seek(0,2) 
    f.write(tResult+'\n')
f.close()

Есть ли способ сделать это, просто я прочитал литературу по регулярным выражениям, но мне кажется, что я не могу это сделать.

Рабочая версия:

dir = os.getcwd()
for infile in glob.glob( os.path.join(dir, '*.out') ):
    file_handler = open(infile, "r")
    content = file_handler.read()
    file_handler.close()
    rtime = re.findall(' REAL TIME  *.+', content)[-1]
    #Find CPU Time
    ctime = re.findall(' CPU TIMES  *.+', content)[-1]
    #Create and Format the results.
    tResult = str(rtime)+','+str(ctime)
    print tResult

1 Ответ

2 голосов
/ 17 ноября 2011

Я считаю, что re.match ищет только в первый раз, вместо этого вы можете использовать re.findall (pattern, string):

>>> re.findall('-[a-zA-Z]', 'ls -A -H -B -b .')
['-A', '-H', '-B', '-b']

Тогда вы можете просто получить к нему доступ, как и к любому другому списку:

>>> re.findall('-[a-zA-Z]', 'ls -A -H -B -b .')[-1]
'-b'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...