Я хотел бы использовать регулярное выражение для заполнения значений словаря в Python. Я использую регулярное выражение, потому что исходный формат строк, из которых я извлекаю данные, не согласован от строки к строке, но соответствующие данные в строке легко найти и последовательно отформатировать.
Некоторые строки не содержат совпадений для данного ключа, поэтому функция регулярного выражения findall
выдаст пустой список. Поэтому следующий код, где я использую findall
и просто адресую 0-й элемент для заполнения словаря, будет работать только тогда, когда строка содержит совпадение для каждого ключа, в противном случае выдается IndexError
.
import re
def main():
my_string = "JC is a 45 year-old male."
info = {
"Name": re.findall(r"[A-Z][A-Z]", my_string)[0],
"Age": re.findall(r"\d{1,2}", my_string)[0],
"Sex": re.findall(r" male| female", my_string)[0].lstrip()
}
main()
Этот код, как ожидается, выдает словарь
{
"Name": "JC",
"Age": '45',
"Sex": "male"
}
Код, который у меня действительно работает, выглядит следующим образом:
import re
def main():
my_string = "JC is a 45 year-old."
info = {
"Name": '',
"Age": '',
"Sex": ''
}
if re.findall(r"[A-Z][A-Z]", my_string):
info["Name"] = re.findall(r"[A-Z][A-Z]", my_string)[0]
if re.findall(r"\d{1,2}", my_string):
info["Age"] = re.findall(r"\d{1,2}", my_string)[0]
if re.findall(r" male| female", my_string):
info["Sex"] = re.findall(r" male| female", my_string)[0].lstrip()
main()
И дает словарь
{
"Name": "JC",
"Age": "45",
"Sex": ''
}
Я бы хотел сделать это более кратко. Фактический словарь для того, что я делаю, содержит намного больше ключей, чем только эти 3, и я чувствую, что должен быть лучший способ, чем иметь оператор if
для каждого ключа. Спасибо!