有没有一种方法可以使用正则表达式将地址字符串分成 3 个单独的字符串

Is there a method for dividing an Address string into 3 separate strings using regex

我目前正在做一个项目,该项目要求我将地址分为街道号码、街道名称,如果有套房,则分为套房名称。 例如:1360 白橡树 RD STE F -----> 1360 |白橡树路 | STE F

我目前正在使用 google sheet 并使用 =regexextract() 功能,该功能使用 Regex 将字符串解析到不同的列中。这就是我目前划分数字和街道的方式(假设完整地址在 B 列中。

=ArrayFormula(REGEXEXTRACT(B1:B,"[0-9]*")) ---->gets the number EX:(1360)

=ArrayFormula(REGEXEXTRACT(B1:B," [a-zA-Z0-9 ]+")) ---->gets the street address including the suite number with a white space at the begining EX:( WHITE OAK RD STE F)

我正在努力解决的问题是如何从第二个公式中删除白色 space 并防止它获取套件文本(始终以 STE 开头)。最后,获取套件文本和编号的公式是什么。

谢谢,我很感激你能提供的任何帮助!

对于 Google 个工作表,您可以使用以下 3 个公式:

=REGEXEXTRACT(B1,"^[0-9]*")
=REGEXREPLACE(B1,"^[0-9\s]*|\s*STE.*$", "")
=REGEXEXTRACT(B1,"STE.*$")

我会使用 lookbehinds,但它们并没有在所有浏览器中得到普遍支持(目前)。

我不是 Google 表格专家,所以我选择删除 ArrayFormula 并将 B1:B 替换为 B1,因为它们看起来多余。

MonkeyZeus 提供的公式完美运行,没有任何问题。

如果您的结果在相邻的列中,您可以在每一行上使用一个公式,例如

=SPLIT(REGEXREPLACE(B1,"([0-9]+) (.+) (STE.*)","♣︎♣︎"),"♣︎")

或者甚至使用数组公式来获取整个列的结果

=ArrayFormula(IFERROR(SPLIT(REGEXREPLACE(B1:B,"([0-9]+) (.+) (STE.*)","♣︎♣︎"),"♣︎")))

公式的作用

  • 使用括号 () 我们将文本分为 3 组 </code>、<code></code></li> <li><code>♣︎♣︎ 添加字符 ♣︎(可以是任何不干扰公式的字符)我们为 SPLIT 函数准备文本
  • 我们将现在形成的文本分成组,到找到 ♣︎ 的相邻列
  • Arrayformula 将以上所有内容应用于列 B 中的每一行,而 IFERROR 确保我们不会出现任何错误(例如发现空单元格时)。


使用的函数: