chaturanga

Рейтинг
117
Регистрация
22.08.2012

Интересный ход с незахватываемым "[A-Z][A-Za-z\s \.]"

Только стоимость жутко выросла.

Вложенный незахватываемый блок не нужен - получаем вложенный match, который вообще не используется, лучше заменить символьным классом.

ИЛИ также лучше заменить на символьные классы - сложность их раскрытия много меньше альтернативной ветки.

[\s ]* - избыточность, хотя интерпретатор должен сам её устранить

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

Понизили стоимость с 4361 до 1275.

Sly32 #:

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

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

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

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

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

Заглавная буква проверяется и в обычном варианте  https://regex101.com/r/F2WzQJ/1 и с опережающей проверкой  https://regex101.com/r/3IfTHj/1

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

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

Как альтернативный вариант - https://regex101.com/r/7S9KSB/1

Результат должен быть примерно тот же, но запрос будет более ресурсоёмким за счёт дополнительной опрежающей проверки.

Выборка будет без подгрупп, но с "концевыми" знаками препинания и пробелом.

Sly32 #:

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


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

Remote location: Brazil."

Также проблем не вижу.

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

14 и 17 выборки.

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

Sly32 #:

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

Вообще проблем не вижу (15, 16 выборки) - https://regex101.com/r/6hfgak/1

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

Числа экспериментально подберите.

Sly32 #:

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

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

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

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

Sly32 #:

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

Здесь и вычленяется регуляркой, сплитится уже вычленение.

Из этого вычленения также можно всё достать второй регуляркой вместо сплита. Но одной сделать не получится - текст слишком "неоднородный".

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

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

$str = "This role may also be located in our Playa Vista, CA campus.Note: By applying to this position you will have an opportunity to share your preferred working location from the following: Mountain View, CA, USA; Atlanta, GA, USA; Boulder, CO, USA; Chicago, IL, USA; New York, NY, USA; Los Angeles, CA, USA; San Francisco, CA, USA; Washington D.C., DC, USA.
This role may also be located in our Playa Vista, CA campus.Note: Google’s hybrid workplace includes remote and in-office roles. By applying to this position you will have an opportunity to share your preferred working location from the following:In-office locations: San Francisco, CA, USA; Boulder, CO, USA; Los Angeles, CA, USA.Remote location(s): California, USA; Colorado, USA.
Please submit your resume in English - we can only consider applications submitted in this language.
Note: Google’s hybrid workplace includes remote roles
Remote location: Brazil.";
$pattern = "/(location.*?:)([a-zA-Z ,;\.]*)([\.;])/";
$split = array();
if(preg_match_all($pattern, $str, $matches))
  foreach($matches[2] as $val)
    $split = array_merge($split, explode(";", $val));

  print_r($split);
VadimGen #:

не ясно выразился.

в исходниках:

Please submit your resume in English - we can only consider applications submitted in this language.

Note: Google’s hybrid workplace includes remote roles

Remote location: Brazil.

А, обсуждение не читал :)

Тогда без шансов, только по словарю.

VadimGen #:

USA ни везде есть))

185-207Mountain View, CA, USA
209-225Atlanta, GA, USA
227-243Boulder, CO, USA
245-261Chicago, IL, USA
263-280New York, NY, USA
282-302Los Angeles, CA, USA
304-326San Francisco, CA, USA
328-352Washington D.C., DC, USA
622-644San Francisco, CA, USA
646-662Boulder, CO, USA
664-684Los Angeles, CA, USA
705-720California, USA
722-735Colorado, USA


где нет?

Всего: 325