Я работаю над проектом RoR, где я хочу найти действительный австралийский почтовый индекс из строки. Моя строка выглядит следующим образом: -
"[\"\", \"\\\"ParsedText\\\":TVR \", \"PURCHASE \", \"TOTAL \", \"APPROVED \", \"05/02/18 20.51 \", \"TOTAL \", \"EFT \", \"CHANGE \", \"Taxable Iteus \", \"TOTAL includes GST \", \"OTHER SAVINGS \", \"Woolworths \", \"fresh people \", \"VICTORIA PARK PH: (08) 6318 9975 \", \"Your Store Manager is: Mark \", \"Your Assistant Store Manager is: Nick \", \"Your Customer Service Manager is: Taylar \", \"Let us know how can make your shopping trip better \", \"WOOLWORTHS INVOICE - ABN 88 OOO 014 675 \", \"$34.44 \", \"CARO:.............0553 T \", \"$0.00 \", \"$0.75 \", \"22.65 \", \"*SMITHS CRINKLE PERI PERI 150G \", \"SUNRICE BASMATI IKG \", \"NESTLE MILO POUCH 150G \", \"INGHAM BREAST 400G \", \"*BULLA CREAMY CLASSICVANILLA 21 \", \"DON HAM LEG SHAVED ENGLISH BAKEO 250G \", \"GOLDBELGlANCHOCOLATELAVACAKE2PK180G \", \"CHOBANI GREEK YOG BLUEBRY NON FAT 170G \", \"Qty \", \"$2.25 ea \", \"3 \", \"CHOBANI GREEK YOG MANGO FAI I?OG \", \"Qty \", \"$2.25 ea \", \"3 \", \"CHOBANI GREEK YOG BLACK CHERRY 170G \", \"Qty \", \"2 \", \"$2.25 ed \", \"CHOBANI GREEK YOG STRAWB BANANA 170G \", \"Oty \", \"2 \", \"$2.25 ea \", \"CHOBANI GREEK OFFER \", \"17 SUBTOTAL \", \"WOOLWORTHS \", \"VICTORIA PARK \", \"4333 \", \"MERCH ID: 611000606004333 \", \"TERM ID. \", \"\\\"4333088 \", \"Bankwest Credit CREDIT \", \"AIO \", \"A0000000041010 \", \"ARQC \", \"7EB518169AOB56E? \", \"0000000000 \", \"$34.44 \", \"$34.44 \", \"00 \", \"002366 \", \"3.29 \", \"4.20 \", \"2.00 \", \"4. Iff \", \"5.00 \", \"2, BOA \", \"3.00 \", \"6.75 \", \"6.75 \", \"4.50 \", \"4.50 \", \"-12.50 \", \"$34.44 \", \"$34.44 \", \"Thank'S for pi Cking \", \"Total Savings $ 22.65 \", \",\\\"ErrorMessage\\\":\\\"\\\",\", \"\\\"ErrorDetails\\\":\\\"\\\"\", \"},\", \"],\", \"\\\"OCRExitCode\\\":\\\"1\\\",\", \"\\\"IsErroredOnProcessing\\\":\\\"false\\\",\", \"\\\"ErrorMessage\\\":\\\"null\\\",\", \"\\\"ErrorDetails\\\":\\\"null\\\",\", \"\\\"ProcessingTimeInMilliseconds\\\":\\\"1.735\\\",\", \"\\\"SearchablePDFURL\\\":\\\"Searchable PDF not generated as it was not requested.\\\"\", \"}\"]"
Я пробовал два следующих шаблона: -
mystring[/(0[289][0-9]{2})|(0[89][0-9]{2})|([1-2]{1}[0-9]{1}[0-9]{2})|(2[9][0-1]{1}[1-4]{1})|([3-7]{1}[0-5]{1}[0-9]{2})|([7-9]{1}[8-9]{1}[0-9]{2})/]
А также:
mystring[/\d{4}/]
Но оба шаблона возвращают недопустимые почтовые индексы. Поскольку моя строка содержит номер телефона (08) 6318 9975, она возвращает первые четыре числа 6318, что является недопустимым почтовым индексом. Правильный почтовый индекс в моей строке - 4333. Пожалуйста, помогите мне найти действительный почтовый индекс. Заранее спасибо!
да формат такой же
Вам нужен самый первый действительный почтовый индекс или все почтовые индексы?
Будет только один действительный почтовый индекс, остальные будут любыми цифрами. я хочу действующий почтовый индекс
Австралийский почтовый индекс всегда представляет собой четырехзначное число, но моя строка может содержать некоторые другие четырехзначные числа.
Вы пробовали mystring[/\\"\d{4}\\"/], который выглядит так, как будто он должен захватывать именно это поле, когда 4 числа находятся сами по себе.
Возвращает ноль.
Думаю можно использовать mystring[/VICTORIA PARK\s*",\s*"(\d+)/, 1]
Я не могу использовать "ПАРК ВИКТОРИИ", так как это не исправлено.
Тогда какое правило? Как вы можете определить контекст, правила для извлечения?
Там может быть любой текст, любой четырехзначный номер, но мне нужно найти только действительные австралийские почтовые индексы.
Тогда это невозможно, поскольку любые 4-значные числа, соответствующие AUS ZIP, будут соответствовать вашим требованиям.
Спасибо за помощь, попробую другой подход ... есть ли драгоценный камень, который может предоставить список австралийских почтовых индексов?





Проверь это
(?<!\d |\d)\d{4}(?= ?\\)
пример объяснение в правом верхнем углу страницы
или это
(?<=\")\d{4}(?= ?\\)
пример объяснение в правом верхнем углу страницы
Примечание: для реализации в ruby избегайте специальных символов (я не знаю, что Ruby может быть истинным, может быть ложным)
mystring[/(?<!\d |\d)\d{4}(?= ?\\)/]
mystring[/(?<=\")\d{4}(?= ?\\)/]
Возвращает ноль.
Не могли бы вы сначала вызвать JSON.parse на этой строке, чтобы уменьшить все лишние отметки \\\"?
он также возвращает 6318 с номера телефона (08) 6318 9975
похоже, что у Ruby есть некоторые ограничения на просмотр назад :(
Всегда ли текст почтового индекса будет иметь такое форматирование?
\"4333 \"