Regex 如何使用正则表达式从地址中提取城市。例如';休斯顿';从格式';德克萨斯州休斯敦维多利亚街113号';

Regex 如何使用正则表达式从地址中提取城市。例如';休斯顿';从格式';德克萨斯州休斯敦维多利亚街113号';,regex,Regex,如何使用正则表达式从地址中提取城市。例如,格式为“德克萨斯州休斯顿维多利亚街113号”的“休斯顿”。在本例中: 德克萨斯州休斯敦维多利亚街113号 城市是介于倒数第二个逗号(可选择后跟一个或多个空格)和最后一个逗号之间的任何东西 最后一个逗号是两个大写字母(表示州)之前的任何字符 因此: 包含一个捕获组,$1将是您所在城市的名称 正则表达式的解释: +-一对任意字符数 \,-后跟逗号 \s*-后跟零表示任意数量的空格 [^\,]+-后跟任意数量的非逗号字符 \,-后跟逗号 \s*-后跟零表示

如何使用正则表达式从地址中提取城市。例如,格式为“德克萨斯州休斯顿维多利亚街113号”的“休斯顿”。

在本例中:

德克萨斯州休斯敦维多利亚街113号

城市是介于倒数第二个逗号(可选择后跟一个或多个空格)和最后一个逗号之间的任何东西

最后一个逗号是两个大写字母(表示州)之前的任何字符

因此:

包含一个捕获组,
$1
将是您所在城市的名称


正则表达式的解释:

  • +
    -一对任意字符数
  • \,
    -后跟逗号
  • \s*
    -后跟零表示任意数量的空格
  • [^\,]+
    -后跟任意数量的非逗号字符
  • \,
    -后跟逗号
  • \s*
    -后跟零表示任意数量的空格
  • [A-Z]{2}
    -后跟2个大写字母
  • $
    -比赛结束
因为
[^\,]+
的周围有括号,所以这是捕获并返回为
$1

的内容,使用它可以满足您的需要:

(?<=\,\s)[a-zA-Z\s]*(?=\,\s+[A-Z]{2}$)

(?[a-zA-Z0-9\s]+,\s+([a-zA-Z\s]+),[a-zA-Z\s]+如果您处理的数据是干净的,正则表达式可以很好地工作。上面的评论应该提供一个。如果您处理的数据不干净-可能是手写文件的ocr,您可能需要查看NLP库。这是一个例子。如果您试图用简单的正则表达式处理地址,必须提及:它在城市的左边。谢谢你,@Ildar。更正。
(?<=\,\s)[a-zA-Z\s]*(?=\,\s+[A-Z]{2}$)