Python正则表达式从字符串中提取某些单词

时间:2019-10-07 15:28:36

标签: regex python-3.x beautifulsoup

我下面有一个长字符串,

  

'海拔信息:海拔范围:\ xa05680-5720   ft \ xa0 \ xa0 \ xa0 \ xa0(40英尺闭合轮廓)NAVD88海拔:\ xa05683   ft / 1732 m \ xa0 \ xa0 \ xa0 \ xa0(范围5683-5723 ft)纬度/经度   (WGS84)32°56 \'17 \'\'N,116°29 \'9 \'\'W32.938182,-116.485858(Dec   Deg)548063 E 3644551 N,Zone 11(UTM)国家美国   州州/省加利福尼亚(最高点)   县/二级地区圣   迭戈 LinksSearch Engines-在网络上搜索“石榴石山”'

我想通过使用正则表达式获得“美国”,“加利福尼亚(最高点)”,“圣地亚哥”这两个词。

通过以下代码我很难找到“美国”和“圣地亚哥”,但结果为空

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 :(得分:0)

这对我有用:

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

答案 1 :(得分:0)

\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))