И вновь доброго времени суток!
На сей раз у меня пара небольших вопросов по регулярным выражениям. Код следующий:
Тут правильно работает первая часть, про b_name. А вот с starttime почему-то так же не получается написать, чтобы поиск шел: или.... или... или... По отдельности строки работают и находят из документов то, что нужно. Но, если их писать в одну строку через | - то не получается. К этому вопросу прикладываю список ссылок, которые должны все обрабатываться (links2.txt). И это первый вопрос. Второй - со starttimeUT выдает "No such group" и не ищет( Хотя я, вроде, правильно написала выражение для поиска. Он должен искать цифры формата чч:чч:чч.ччч, но нет. Опытным путем выяснила, что без точки тут: m = re.search('\d{2}:\d{2}:\d{2}.\d+.', string) ошибку про группу не выдает, но точка-то там нужна( К этому вопросу прикладываю полный список ссылок, на всякий случай (links.txt).
Заранее благодарю за любую помощь!
На сей раз у меня пара небольших вопросов по регулярным выражениям. Код следующий:
Код:
from bs4 import BeautifulSoup
import requests
import re
from astropy.table import Table
def write_tab(lst_data):
# b_name, starttime, starttimeUT
lst_names = "GCN Name Time TimeHHMMSS".split()
tab = Table(rows=lst_data, names=lst_names)
tab.write('Burst_info.txt', format='ascii.fixed_width', delimiter='', overwrite=True)
def parce_line(string):
string = string.replace('\n', ' ')
m = re.search('(GRB\s*\d{6}\w |GRB\s*\d{6} |SGR\s*\d+.\d+ |SGR\d+.\d+ |\d+\s*\SGR)', string)
if not m is None:
b_name = m.group(1).replace(' ', '')
else:
b_name = '--'
print(b_name)
#m = re.search('(T0\s*=\s*(\d+\.\d+) |T0....\s*=\s*(\d+))', string) #don`t work!
#m = re.search('(T0\s*=\s*(\d+\.\d+))', string)
#m = re.search('(starting at\s*(\d+)\s*)', string) #https://gcn.gsfc.nasa.gov/gcn3/13736.gcn3
#m = re.search('(T0....\s*=\s*(\d+))', string) #https://gcn.gsfc.nasa.gov/gcn3/13351.gcn3
#https://gcn.gsfc.nasa.gov/gcn3/11971.gcn3
#https://gcn.gsfc.nasa.gov/gcn3/11951.gcn3
#m = re.search('(T0.....\s*=\s*(\d+))', string) #https://gcn.gsfc.nasa.gov/gcn3/12663.gcn3
#m = re.search('(T0\s*=\s*(\d+))', string) #https://gcn.gsfc.nasa.gov/gcn3/10228.gcn3
#m = re.search('(at\s*(\d+\.\d+)\s*)', string) #https://gcn.gsfc.nasa.gov/gcn3/5841.gcn3
#https://gcn.gsfc.nasa.gov/gcn3/5570.gcn3
#if not m is None:
#starttime = m.group(2)
#else:
#starttime = '--'
#print(starttime)
m = re.search('\d{2}:\d{2}:\d{2}.\d+.', string)
if not m is None:
starttimeUT = m.group(3)
else:
starttimeUT = '--'
print(starttimeUT)
return [b_name, starttimeUT]
def main():
with open("links.txt") as f:
lines = [line.rstrip('\n') for line in f]
lst_data = []
for line in lines:
line = line.strip()
print(line)
str_gcn = line[-10:-5]
response = requests.get(line)
soup = BeautifulSoup(response.content, "lxml")
ptag = soup.find(lambda tag: tag.name == 'p')
string = str(ptag)
lst_data.append([str_gcn,] + parce_line(string))
write_tab(lst_data)
main()
Заранее благодарю за любую помощь!