Sly32

Рейтинг
370
Регистрация
29.03.2012
chaturanga #:

А вот с учётом 3-х запятых... Теоретически можно, но это будет либо две тернарки, либо 2 ИЛИ. Стоимость исполнения вырастет катастрофически. Может какие-то вариации комбинирования опережающих проверок с тернаркой, но тоже будет очень сложная конструкция.

Даже пытаться не стану -  да уже за те варианты которые предложены выше надо отрывать руки - в продакшине такому не место.

Тебе и так огромное спасибо)))  Я пока не вижу вариантов других с учетом криворукости контентщиков я не могу полагаться на сплит.  На фоне остального алгоритма тут в принципе стоимость исполнения неважна, наоборот приходится замедлять, чтобы успело все прогрузиться. я и делал два разных регекспа и они работают, но твои варианты прям красота лаконичности, многому научился) 

chaturanga #:
Может какие-то спецсимволы есть в исходном тексте?

My bad)) Я убрал экоанирование точки - прочитал что в скобках оно не нужно, но после этого поломалось. И еще - этот паттерн подразумесает любые повторения слов - : word, word, Word word; 

а можно сделать так чтоб не более  3-х слов попадало и только если  кэпитал леттер? То есть:

New York, NY, USA ;- попало

New York, Florida, NY, USA; - не попало

new york, NY, usa; не попало

Taras Petrenko #:

Голый сервак или уже с предустановкой?

Если кому-то нужна предустановка джанги, которая укладывается примерно в 5 команд - настоятельно бы рекомендовал сменить профессию, например на дворника...

Потому что примерно так: 

- pip install django

admin createproject app

admin createapp app

chaturanga #:
Но, в целом, для снижения false positive лучше сделать так -  https://regex101.com/r/yNZTpQ/1

споткнулось на таком :


"Note: Google’s hybrid workplace includes remote roles.

Remote location: Brazil."

Любой, на котором есть Питон версии выше 3
chaturanga #:

Ну таки если нельзя полагаться на текст, то остаётся только пунктуация

https://regex101.com/r/KCVie5/1

Но при таком подходе сплит однозначно лучше регекспа.

Круто, похоже это то что надо. Натравлю на 2000 страниц, потом отпишусь о результатах

UPD:

Вот такую строку не смог разобрать:

Note: By applying to this position you will have an opportunity to share your preferred working location from the following: New York, NY, USA; San Francisco, CA, USA.

результат:

By applying to this position you will have an opportunity to share your preferred working location from the following; New York, NY, USA; San Francisco, CA, USA

VadimGen #:
'/location.*?:([a-zA-Z ,;\.]*)[\.;]/'

Я к сожалению не могу полагаться на  "locations",  нет гарантии что это скрипт а не контентщик) А в таком случае мне может прилететь  "locations, lacations, lacotion" etc ))) Я вообще не могу на текст полагаться, только на шаблон, что будет что то типа [city, state, country[,;]], причем в словах могут быть точки и пробелы - Vashingthon D.C.

chaturanga #:

Ну или если мы гарантированно знаем, что "префикс" строки содержит "location.*:", то делать а-ля https://regex101.com/r/LCOGoA/1

Но сплитить группу всё-равно придётся. На условном php

я уже писал - сплиты не подходят, нужно вычленить только регуляркой. Мой вариант работает, но искал еще варианты

damn-doubleclick #:
A-Parser, Datacol, BAS, ZennoPoster, Selenium

Selenium это не парсер, на нем можно написать парсер, но эта штука исключительно для погромистов. Но вещь крутая для тех кто понимает.

dzthd #:
Регулярки? Эксплоде (сплит) по точке с запятой решит задачу.

написал выше - вообще никак не решает. Не нужно советовать варианты инык, нужна регулярка в чистом виде, без привязок к языку

В Питоне это решается так -

office_location = " ".join(re.findall(r"[\b\w\s.]+,\s[\w\s.]+,\s[\w\s.]+[;.]", location)).strip()
remote_location = " ".join(re.findall(r"\b\w{3,},\s\w+[;/.]", location))

Всего: 7322