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

如何使用Regex从带人口数字的文本中匹配城市名称?

解决正则匹配城市名称的问题

你的原正则返回None的原因很明确:正则末尾的$锚定了字符串结尾,但你的字符串最后是数字序列,而正则只匹配字母、空格和连字符,自然找不到符合条件的内容,所以返回None。

正确的正则方案

想要提取所有城市名称,需要利用城市和人口之间的固定分隔格式( - 数字)来定位,推荐用正向预查精准匹配:

[A-Za-z]+(?:\s[A-Za-z]+)*(?=\s-\s\d)

正则说明:

  • [A-Za-z]+(?:\s[A-Za-z]+)*:匹配单单词或多单词的城市名(比如New York、Berlin),(?:...)是非捕获组,用来重复匹配“空格+字母组合”的结构。
  • (?=\s-\s\d):正向预查,确保匹配的内容后面紧跟 - 数字的格式,这样能准确找到每个城市的结束位置,且不会把分隔符和人口数字包含进来。

Python 代码示例

import re

city_str = "New York - 8 468 000 Los Angeles - 3 849 000 Berlin - 3 645 000"
pattern = r'[A-Za-z]+(?:\s[A-Za-z]+)*(?=\s-\s\d)'
cities = re.findall(pattern, city_str)
print(cities)  # 输出结果: ['New York', 'Los Angeles', 'Berlin']

另一种简化方案

如果不想用复杂的正则,也可以先按人口部分分割字符串,再提取城市:

import re

city_str = "New York - 8 468 000 Los Angeles - 3 849 000 Berlin - 3 645 000"
# 按" - 数字开头的序列"分割
parts = re.split(r'\s-\s\d[\d\s]*', city_str)
# 过滤空内容并去除首尾空格
cities = [part.strip() for part in parts if part.strip()]
print(cities)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:35:24