Всем доброго времени суток!
У меня есть следующий код:
Он должен находить в тексте разные численные значения. Первое значение, b_name находит, а вот дальше начинаются проблемы. По порядку:
1. starttime у меня нескольких видов. Какое-то количество цифр до точки и какое-то после. Как мне это реализовать в коде, чтобы получить набор цифр (вида 9267.293)? Я попыталась сделать несколько вариантов через | (то есть, чтобы находилось или одно или другое или третье), но не работает(
2. starttimeUT вида UT (19:56:54.617). Мне надо, чтобы осталось только 19:56:54.617, но мой вариант так же, по-видимому, содержит ошибку(
3. duration вида duration of ~xxx.xxx s. Мне нужно вытащить все символы (их количество произвольное) между duration of ~ и s, чтобы получить цифры вида: 0.37. Опять же мой вариант не совсем правильный, похоже(
4. fluence проблема та же, что с duration. Он вида: fluence of 3.12(-0.61,+0.94)x10^-6 erg/cm2. То есть нужны все символы между fluence of и erg/cm2 (их количество так же произвольно).
5. И наконец peak_fl работает, если убрать | '\d\d\d\-s, но мне нужно, чтобы находило или первый вариант или второй или как-то задать произвольное количество символов. И так же, чтобы результат выдавался без -ms / -s, только числа.
Так же прикладываю файл, который используется в коде. Работаю на Python 3.9.0.
Буду рада любой помощи и заранее спасибо.
У меня есть следующий код:
Python:
from bs4 import BeautifulSoup
import requests
import re
with open("List_of_links.txt") as f:
lines = [line.rstrip('\n') for line in f]
for line in lines:
response = requests.get(line)
soup = BeautifulSoup(response.content, "lxml")
ptag = soup.find(lambda tag: tag.name == 'p')
string=str(ptag)
b_name=re.search('GRB\s\d\w\w\w\w\w\w', string)
print(b_name.group(0))
starttime=re.search('T0=\d\d\d\d\d\.\d\d\d\s' | 'T0=\d\d\d\d\d\.\d\d\s' | 'T0=\d\d\d\d\.\d\d\s', string)
print(starttime)
starttimeUT=re.search('UT\s\:\d\d\:\d\d\:\d\d\.\d\d\d\s', string)
print(starttimeUT)
duration=re.findall('duration of ~\w\w\w\w\s', string)
print(duration)
fluence=re.findall('fluence of\s\???', string)
print(fluence))
peak_fl=re.findall('\d\d\-ms' | '\d\d\d\-s', string)
print(peak_fl)
Он должен находить в тексте разные численные значения. Первое значение, b_name находит, а вот дальше начинаются проблемы. По порядку:
1. starttime у меня нескольких видов. Какое-то количество цифр до точки и какое-то после. Как мне это реализовать в коде, чтобы получить набор цифр (вида 9267.293)? Я попыталась сделать несколько вариантов через | (то есть, чтобы находилось или одно или другое или третье), но не работает(
2. starttimeUT вида UT (19:56:54.617). Мне надо, чтобы осталось только 19:56:54.617, но мой вариант так же, по-видимому, содержит ошибку(
3. duration вида duration of ~xxx.xxx s. Мне нужно вытащить все символы (их количество произвольное) между duration of ~ и s, чтобы получить цифры вида: 0.37. Опять же мой вариант не совсем правильный, похоже(
4. fluence проблема та же, что с duration. Он вида: fluence of 3.12(-0.61,+0.94)x10^-6 erg/cm2. То есть нужны все символы между fluence of и erg/cm2 (их количество так же произвольно).
5. И наконец peak_fl работает, если убрать | '\d\d\d\-s, но мне нужно, чтобы находило или первый вариант или второй или как-то задать произвольное количество символов. И так же, чтобы результат выдавался без -ms / -s, только числа.
Так же прикладываю файл, который используется в коде. Работаю на Python 3.9.0.
Буду рада любой помощи и заранее спасибо.