Как получить данные из строки?

У меня есть строка, содержащая псевдоним игрока 1, ссылку на профиль игрока 1, псевдоним игрока 2, ссылку на профиль игрока 2, оружие. Мне нужно получить эти данные из строки ниже
`[ex.endermen](profile_url1) got killed by [og.[(Z)]arcus(0.43k/d)](profile_url2) (FN Evolys, 56.83m)`


Мне нужно получить данные и вывести их в формате

print(f"name1 = {name1}")
 print(f"name1_url = {name1_url}")
 print(f"name2 = {name2}")
 print(f"name2_url = {name2_url}")


есть ли способ правильно получить всю информацию, при условии, что строка может измениться на эту

[ex.endermen](profile_url1) got killed by [og.[(Z)]arcus(0.43k/d)](profile_url2) (FN Evolys, 56.83m)


или

[ex.endermen](profile_url1) got killed by [platina](profile_url2) (FN Evolys, 56.83m)


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

name_weapon_pattern = r"\[(.*?)\].*\((.*?)\).*\((.*),.*\)"
 name_weapon_match = re.search(name_weapon_pattern, string)

 url_pattern = r"\((.*?)\)"
 url_match = re.findall(url_pattern, string)

 name1 = name_weapon_match.group(1)
 name1_url = name_weapon_match.group(2)
 name2 = name_weapon_match.group(3)
 name2_url = url_match[1]

 print(f"name1 = {name1}")
 print(f"name1_url = {name1_url}")
 print(f"name2 = {name2}")
 print(f"name2_url = {name2_url}")


результат:

name1 = og.[(Z)
name1_url = name2_url
name2 = FN Evolys
name2_url = 0.43k/d
  • Вопрос задан
  • 156 просмотров
Решения вопроса 1
ramzis
@ramzis
FullStackOverflow
Поиск индекса и срезы, как решение.
text = '[ex.endermen](profile_url1) got killed by [og.[(Z)]arcus(0.43k/d)](profile_url2) (FN Evolys, 56.83m)'

name1 = text[text.find('[')+1:text.find(']')]
profile_url1 = text[text.find('(')+1:text.find(')')]
profile_url2 = text[text.rfind('(', 0, text.rfind('('))+1: text.find(') (')]
name2 = text[text.find('[', text.find(']'))+1: text.rfind(']')]
weapon = text[text.rfind('(',)+1: text.rfind(')')].split(',')[0]

print(name1)
print(profile_url1)
print(profile_url2)
print(name2)
print(weapon)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
SoreMix
@SoreMix Куратор тега Python
yellow
import re

strings = [
    '[ex.endermen](profile_url1) got killed by [og.[(Z)]arcus(0.43k/d)](profile_url2) (FN Evolys, 56.83m)',
    '[ex.endermen](profile_url1) got killed by [platina](profile_url2) (FN Evolys, 56.83m)'
]

regex = r'^\[(?P<name1>.+?)\]\((?P<name1_url>.+?)\).+?\[(?P<name2>.+)\]\((?P<name2_url>.+?)\)'

string_parser = re.compile(regex)

for string in strings:
    print(string_parser.match(string).groupdict())


out:
{'name1': 'ex.endermen', 'name1_url': 'profile_url1', 'name2': 'og.[(Z)]arcus(0.43k/d)', 'name2_url': 'profile_url2'}
{'name1': 'ex.endermen', 'name1_url': 'profile_url1', 'name2': 'platina', 'name2_url': 'profile_url2'}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы