У меня нет решения PyYaml, но если у вас уже есть строка из файла YAML, вы можете использовать модуль Python regex
для извлечения текста внутри [ ]
.
import re
txt = "Present | dūc[ō] | dūc[is] | dūc[it] | dūc[imus] | dūc[itis] | dūc[unt]"
parts = txt.split(" | ")
print(parts)
# ['Present', 'dūc[ō]', 'dūc[is]', 'dūc[it]', 'dūc[imus]', 'dūc[itis]', 'dūc[unt]']
pattern = re.compile("\\[(.*?)\\]")
output = []
for part in parts:
match = pattern.search(part)
if match:
# group(0) is the matched part, ex. [ō]
# group(1) is the text inside the (.*?), ex. ō
output.append(match.group(1))
else:
output.append(part)
print(" | ".join(output))
# Present | ō | is | it | imus | itis | unt
Код сначала разбивает текст на отдельные части, а затем перебирает каждую часть search
-ing для шаблона [x]
.Если он находит его, он извлекает текст в скобках из объекта match и сохраняет его в списке.Если part
не соответствует шаблону (например, 'Present'
), он просто добавляет его как есть.
В конце все извлеченные строки имеют вид join
-вместе перестроил строку без скобок.
РЕДАКТИРОВАТЬ на основе комментария :
Если вам нужен только один изстроки внутри [ ]
, вы можете использовать тот же шаблон регулярных выражений, но вместо этого использовать метод findall
для всего txt
, который вернет list
соответствующих строк вв том же порядке, что они были найдены .
import re
txt = "Present | dūc[ō] | dūc[is] | dūc[it] | dūc[imus] | dūc[itis] | dūc[unt]"
pattern = re.compile("\\[(.*?)\\]")
matches = pattern.findall(txt)
print(matches)
# ['ō', 'is', 'it', 'imus', 'itis', 'unt']
Тогда нужно просто использовать переменную для выбора элемента из списка:
selected_idx = 1 # 0-based indexing so this means the 2nd character
print(matches[selected_idx])
# is