You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言:如何从带后缀的字符串中提取双词城市名?

提取带数字方位后缀的多词城市名解决方案

嘿,这个场景我太熟悉了!针对这种"城市名 + 数字 + 方位缩写"格式的字符串,正则表达式绝对是最高效的解决方案,完美覆盖单词、双词甚至多词的城市名提取需求。

核心思路

观察你的示例字符串:Stovepipe Wells 1 SW、La Junta 17 WSW,它们的共同模式是:

  • 开头是一个或多个首字母大写的单词(城市名,可能是1个、2个甚至更多)
  • 后面跟着数字 + 方位缩写(SW、WSW、N等)

我们只需要匹配开头的连续大写首字母单词组,就能精准提取城市名。

具体实现方案

1. Python代码示例

用正则捕获组直接提取目标内容:

import re

# 编译正则表达式,支持单/多词城市名
city_regex = re.compile(r'^([A-Z][a-z]+(?:\s[A-Z][a-z]+)*)')

# 测试你的示例数据
test_strings = [
    "Stovepipe Wells 1 SW",
    "La Junta 17 WSW",
    "San Francisco 2 NE",
    "Boston 8 NW"
]

for s in test_strings:
    match_result = city_regex.match(s)
    if match_result:
        print(f"提取到的城市名:{match_result.group(1)}")

运行后输出:

提取到的城市名:Stovepipe Wells
提取到的城市名:La Junta
提取到的城市名:San Francisco
提取到的城市名:Boston

2. SQL数据库直接处理

如果需要在数据库层面直接提取,不同数据库的正则函数略有不同:

  • PostgreSQL:
SELECT 
  regexp_match(city_column, '^([A-Z][a-z]+(?:\s[A-Z][a-z]+)*)')[1] AS extracted_city
FROM your_table;
  • MySQL 8.0+:
SELECT 
  REGEXP_SUBSTR(city_column, '^[A-Z][a-z]+(?:\\s[A-Z][a-z]+)*') AS extracted_city
FROM your_table;

正则表达式解释

^([A-Z][a-z]+(?:\s[A-Z][a-z]+)*) 各部分含义:

  • ^:匹配字符串的起始位置,确保我们从开头提取
  • [A-Z][a-z]+:匹配一个首字母大写、后续小写的单词(符合英语地名的命名习惯)
  • (?:\s[A-Z][a-z]+)*:非捕获组,匹配"空格+大写首字母单词"的组合,*表示可以重复0次或多次(这样就支持单词、双词、多词城市名)
  • 整个括号内的内容就是我们要提取的城市名

注意事项

如果你的城市名存在特殊情况(比如包含连字符、缩写等),可以根据实际情况微调正则。比如如果有Fort Worth-2 3 S这类格式,可以把正则里的[a-z]+改成[a-z-]+来兼容连字符。

内容的提问来源于stack exchange,提问作者thiagoveloso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:22:24