使用RegEx格式化街道和数字:切换各种数字格式(例如0-9或0-9a-z或0-9-0-9a-z)的顺序

时间:2019-08-24 05:47:49

标签: regex if-statement google-sheets google-sheets-formula array-formulas

任何RegEx向导都能帮助我理解如何涵盖不同的“差异”吗?

我得到了带有数字的街道名称的各种格式,不幸的是,现在这些都弄乱了,看起来像这样

混乱状态:

  • [0-9]街道名称(例如:12街道)
  • [0-9 [a-z]街道名称(例如:12b街道)
  • [0-9]-[0-9]街道名称(例如:12-14街道)
  • [0-9]-[0-9] [a-z]街道名称(例如:12-14b街道)

所需状态:

  • 街道名[0-9](例如:第12街)
  • 街道名0-9 [a-z](例如:12b街)
  • 街道名[0-9]-[0-9](例如:12-14街)
  • 街道名[0-9]-[0-9] [a-z](例如:12-14b街)

背景: 由于Google通讯录以某种方式设法弄乱了我所有的通讯录地址,因此先显示了门牌号码,然后显示了我要在Google表格中编辑的街道。

我很想“炫耀”我到目前为止的出色表现,但事实是:我没有计划涵盖所有不同情况的计划

3 个答案:

答案 0 :(得分:1)

所以这是一种解决方案,它依赖于“数字”中没有空格。

= REGEXREPLACE(C6, ".+ ", "") & " " & REGEXEXTRACT(C6, ".+ ")

说明:

= REGEXREPLACE(C6, ".+ ", " ")

仅删除实际的数字部分(将其替换为空字符串)。我们只剩下街道名称,所以我们添加了一个空格。

第二部分,即正则表达式相同:

REGEXEXTRACT(C6, ".+ ")

再次查找该数字并将其粘贴到末尾。

答案 1 :(得分:1)

对于示例数据中的格式,您可以使用:

\b(\d+[a-z]?(?:-\d+[a-z]?)?)[ \t]+([a-zA-Z].+)

说明

  • \b单词边界,请防止数字成为大单词的一部分
  • (第1组
    • \d+[a-z]?匹配1个以上的数字和可选的a-z
    • (?:-\d+[a-z]?)?(可选),可以连字符,1+个数字和可选的a-z匹配
  • )关闭群组
  • [ \t]+匹配1个以上空格或制表符
  • (第2组
    • [a-zA-Z].+匹配小写或大写字母a-z,然后按任意字符1+次
  • )关闭群组

Regex demo

例如

= REGEXREPLACE(A1:A, "\b(\d+[a-z]?(?:-\d+[a-z]?)?)[ \t]+([a-zA-Z].+)", "$2 $1")

enter image description here

答案 2 :(得分:0)

=ARRAYFORMULA(IF(REGEXMATCH(A1:A, "^\d"), 
 REGEXEXTRACT(A1:A, " (.*)")&" "&REGEXREPLACE(A1:A, "\s(.+)", ), A1:A))

0