3 releases (breaking)
0.3.0 | Nov 21, 2024 |
---|---|
0.2.0 | Nov 21, 2024 |
0.1.0 | Nov 13, 2024 |
#591 in Text processing
405 downloads per month
10KB
89 lines
Link: https://crates.io/crates/address_book Docs: https://docs.rs/address_book/0.2.0/address_book/ #Тема: address book - адресна книга
Парсер телефонних номерів та полів
Цей проєкт надає інструмент командного рядка для парсингу серії телефонних номерів, ідентифікаторів, дат і неправильних полів. Інструмент створено за допомогою мови програмування Rust і бібліотеки парсингу pest
. Вхідні дані можуть містити телефонні номери у форматі XXX-XXX-XXXX
, ідентифікатори з мінімум 5 алфавітно-цифрових символів і дати у форматі YYYY-MM-DD
, а також можливі неправильні поля. Парсер також підтримує коментарі, які ігноруються під час парсингу.
Процес парсингу
Процес парсингу передбачає обробку рядка даних, що містить поля, розділені комами. Кожне поле може бути одним з наступних:
- Телефонний номер: рядок формату
XXX-XXX-XXXX
(3 цифри, дефіс, 3 цифри, дефіс, 4 цифри). - Ідентифікатор: рядок з мінімум 5 алфавітно-цифрових символів.
- Дата: рядок формату
YYYY-MM-DD
. - Неправильні поля: будь-який рядок, що не відповідає жодному з вищезазначених форматів, вважається неправильним.
- Коментарі: рядки або частини рядків, що починаються з
#
, вважаються коментарями і ігноруються під час парсингу.
Як працює парсинг:
- Парсер обробляє вхідний рядок і намагається зіставити кожне поле з визначеними форматами.
- Валідні поля збираються у список допустимих записів (наприклад, телефонні номери, ідентифікатори, дати).
- Неправильні поля відокремлюються в окремий список для подальшої обробки чи звітності.
- Коментарі ігноруються під час парсингу.
Використання
Ви можете використовувати інструмент командного рядка для парсингу файлу, що містить серію телефонних номерів, ідентифікаторів і дат, а також для обробки неправильних полів і коментарів.
Граматика для парсингу полів
Граматика, що використовується для парсингу полів, складається з наступних правил:
-
fields
: Послідовність полів, розділених комами, з можливими пробілами та коментарями.fields = { (field | invalid_field) ~ (whitespace? ~ "," ~ whitespace? ~ (field | invalid_field))* ~ (whitespace? ~ comment)? }
-
field
: Поле може бути номером телефону, ідентифікатором або датою.field = { phone_number | identifier | date }
-
phone_number
: Номер телефону у форматіXXX-XXX-XXXX
.phone_number = { ASCII_DIGIT{3} ~ "-" ~ ASCII_DIGIT{3} ~ "-" ~ ASCII_DIGIT{4} }
-
identifier
: Ідентифікатор, що складається мінімум з 5 алфавітно-цифрових символів.identifier = { ASCII_ALPHANUMERIC{5,} }
-
date
: Дата у форматіYYYY-MM-DD
.date = { ASCII_DIGIT{4} ~ "-" ~ ASCII_DIGIT{2} ~ "-" ~ ASCII_DIGIT{2} }
-
invalid_field
: Невірне поле, яке не відповідає жодному з вищезгаданих форматів.invalid_field = { (!phone_number ~ !identifier ~ !date ~ (!"," ~ ANY)+) }
-
comment
: Коментар, що починається з#
і ігнорується під час парсингу.comment = { "#" ~ (!"\n" ~ ANY)* }
-
url
: URL, що починається з http:// та містить домен і шлях, наприклад, http://example.com/path/to/resource.url = { "http" ~ "://" ~ (ASCII_ALPHANUMERIC+ ~ "." ~ ASCII_ALPHANUMERIC+)+ ~ ("/" ~ ASCII_ALPHANUMERIC*)* }
-
email
: Адреса електронної пошти у форматі user@example.com.email = { ASCII_ALPHANUMERIC+ ~ "@" ~ ASCII_ALPHANUMERIC+ ~ "." ~ ASCII_ALPHANUMERIC+ }
Dependencies
~4MB
~74K SLoC