Регулярка для поиска данных в тексте.

123 4
S3
На сайте с 29.03.2012
Offline
351
403

Ну что, остались тут живые погромисты? Нужна помошь в написании регулярки)

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

Есть текст такого вида:

```

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.
```

Нужно забрать из текста все локации, на выходе должно быть так:

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; 

San Francisco, CA, USA;  Boulder, CO, USA;  Los Angeles, CA, USA; California, USA; Colorado, USA

У меня получается забрать это только двумя регулярками и обьединить. 
Кто сможет написать одну? Ну или просто варианты?


WS
На сайте с 01.11.2008
Offline
155
#1
Sly32 :

Ну что, остались тут живые погромисты? Нужна помошь в написании регулярки)

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

Есть текст такого вида:

```

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.
```

Нужно забрать из текста все локации, на выходе должно быть так:

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; 

San Francisco, CA, USA;  Boulder, CO, USA;  Los Angeles, CA, USA; California, USA; Colorado, USA

У меня получается забрать это только двумя регулярками и обьединить. 
Кто сможет написать одну? Ну или просто варианты?


покажите свои регулярки, а мы подкорректируем

S3
На сайте с 29.03.2012
Offline
351
#2
Владимир #:

покажите свои регулярки, а мы подкорректируем

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

Я сначала забираю локации для офиса - для них своя регулярка, потом меняю точку в конце на точку с запятой и добавляю ремоте локации

WS
На сайте с 01.11.2008
Offline
155
#3

а зачем вам вообще такая портянка, смешивать штаты с городами в одном списке:

Los Angeles, CA, USA

город

California, USA

штат

S3
На сайте с 29.03.2012
Offline
351
#4
Владимир #:

а зачем вам вообще такая портянка, смешивать штаты с городами в одном списке:

Los Angeles, CA, USA

город

California, USA

штат

Если я вам обьясню - это как то поможет написать регулярку? вкратце - такие бизнес требования. В дальнейшем при отправке на геосервис штат вырезается, если 3 элемента в локации.

VG
На сайте с 30.04.2017
Offline
86
#5

а точно вывод исходника такой, или еще есть варианты?

попробуй)))

$matches = [];

preg_match_all('/(?<=: )([^:]+USA)\./', 'qwe: qwe: qweUSA.sdfd: sdffUSA.', $q);

$q = implode("; ", $q[1]);

D
На сайте с 05.02.2022
Online
50
#6
Регулярки? Эксплоде (сплит) по точке с запятой решит задачу.
VG
На сайте с 30.04.2017
Offline
86
#7
dzthd #:
Регулярки? Эксплоде (сплит) по точке с запятой решит задачу.

там еще в середине исходника вставки есть))

S3
На сайте с 29.03.2012
Offline
351
#8
VadimGen #:

а точно вывод исходника такой, или еще есть варианты?

попробуй)))

$matches = [];

preg_match_all('/(?<=: )([^:]+USA)\./', 'qwe: qwe: qweUSA.sdfd: sdffUSA.', $q);

$q = implode("; ", $q[1]);

Парсится 2000 страниц, локации могут быть какие угодно, например так:


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.


ЕСли я начну разбирать по двоеточию, мне попадет мусор
В данном варианте мне ничего не должно прийти - это знак что локация заберется из другого тега

S3
На сайте с 29.03.2012
Offline
351
#9
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))

VG
На сайте с 30.04.2017
Offline
86
#10
получается окончание USA ни всегда есть. хз по каким правилам вычленить
123 4

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий