регулярное выражение Python извлечь определенные слова из строки - PullRequest
1 голос
/ 07 октября 2019

У меня есть длинная строка ниже,

'Информация о высоте: Диапазон высот: \ xa05680 - 5720 футов \ xa0 \ xa0 \ xa0 \ xa0 (40-футовый замкнутый контур) NAVD88 Высота: \xa05683 фут / 1732 м \ xa0 \ xa0 \ xa0 \ xa0 (диапазон 5683 - 5723 фута) широта / долгота (WGS84) 32 ° 56 '17 \' N ', 116 ° 29 \' 9 \ '\' W32. 938182, -116,485858 (декабрь) 548063 E 3644551 N, зона 11 (UTM) Страна США Штат / провинция Калифорния (высшая точка) Округ / регион второго уровня СанDiego LinksSearch Engines - поищите в сети «Гранатную гору» '

И я хочу получить слова «Соединенные Штаты», «Калифорния (высшая точка)», «Сан-Диего» поиспользуя регулярное выражение.

Я устал искать 'United State' & 'San Diego' по кодам ниже, но результат пуст

country = re.findall(('Country\S([A-z]*)\SState'),table.text)
country
region = re.findall(('Region\S(.)\SLinks'),table.text)
region

Как я мог использовать re для извлечения всех этихслова?

Также, если вместо «Соединенные Штаты» заменить, например, «Япония» / «Франция»

country = re.findall(('Country\S([A-z]*)\SState'),table.text)
country

Вывод «apan» / «rance». Почему они не полное слово.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 октября 2019

\S* Соответствует нулю или более непробельных символов. Вам это здесь не нужно.

Вместо этого используйте .* (ноль или более не-символов новой строки) или явно укажите, какие символы вам нужны.

Например, [A-z0-9 ()]* будет разрешать только буквы, числа, пробелы и паратезы.

Чтобы удалить пробелы до или после, вы можете добавить \s* (маленький s) вне вашей группы и сделать свой * не жадным с вопросительным знаком: \s*(.*?)\s*.

Все вместе:

import re

str = "'Elevation Info:Elevation range:\xa05680 - 5720 ft\xa0\xa0\xa0\xa0(40-foot closed contour) NAVD88 Elevation:\xa05683 ft / 1732 m\xa0\xa0\xa0\xa0(Range 5683 - 5723 ft)Latitude/Longitude (WGS84)32° 56\' 17\'\' N, 116° 29\' 9\'\' W32.938182, -116.485858 (Dec Deg)548063 E 3644551 N, Zone 11 (UTM)CountryUnited StatesState/ProvinceCalifornia (Highest Point) County/Second Level RegionSan DiegoLinksSearch Engines - search the web for \"Garnet Mountain'\""

countries = re.findall(r"Country\s*(.*?)\s*State/", str)
provinces = re.findall(r"Province\s*(.*?)\s*County/", str)
regions = re.findall(r"Second Level Region\s*(.*?)\s*Links", str)

print("Countries:")
for country in countries:
  print(" ", country)

print("Provinces:")
for province in provinces:
  print(" ", province)

print("Second Level Regions:")
for region in regions:
  print(" ", region)

Вы можете поиграть с ним здесь: https://regex101.com/r/yeiJVg/1

Или вы можете сгруппировать их все вместе, чтобы найти несколько групп вбольшая строка:

import re

str = "'Elevation Info:Elevation range:\xa05680 - 5720 ft\xa0\xa0\xa0\xa0(40-foot closed contour) NAVD88 Elevation:\xa05683 ft / 1732 m\xa0\xa0\xa0\xa0(Range 5683 - 5723 ft)Latitude/Longitude (WGS84)32° 56\' 17\'\' N, 116° 29\' 9\'\' W32.938182, -116.485858 (Dec Deg)548063 E 3644551 N, Zone 11 (UTM)CountryUnited StatesState/ProvinceCalifornia (Highest Point) County/Second Level RegionSan DiegoLinksSearch Engines - search the web for \"Garnet Mountain'\""

matches = re.findall(r"Country\s*(.*?)\s*State/[.*\n]*Province\s*(.*?)\s*County/[.*\n]*Second Level Region\s*(.*?)\s*Links", str)

for match in matches:
    print("Country: {}, Province: {}, Second Level Region: {}".format(*match))
0 голосов
/ 07 октября 2019

Это работает для меня:

import re

str = "'Elevation Info:Elevation range:\xa05680 - 5720 ft\xa0\xa0\xa0\xa0(40-foot closed contour) NAVD88 Elevation:\xa05683 ft / 1732 m\xa0\xa0\xa0\xa0(Range 5683 - 5723 ft)Latitude/Longitude (WGS84)32° 56\' 17\'\' N, 116° 29\' 9\'\' W32.938182, -116.485858 (Dec Deg)548063 E 3644551 N, Zone 11 (UTM)CountryUnited StatesState/ProvinceCalifornia (Highest Point) County/Second Level RegionSan DiegoLinksSearch Engines - search the web for \"Garnet Mountain'\""

country = re.findall(r"Country(\S*.*)State/", str)
province = re.findall(r"Province(\S*.*)County/", str)
city= re.findall(r"Region(\S*.*)Links", str)

print(country[0])
print(province[0])
print(city[0])
print("--------")

Кроме того, вы, вероятно, можете вообще отказаться от использования регулярных выражений с Split():

country = str.split("Country")[1].split("State/")[0]
province = str.split("Province")[1].split("County/")[0]
city = str.split("Region")[1].split("Links")[0]

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...