匹配没有后缀的不同格式的街道号码
Match street number from different formats without suffixes
我们有一个多年来自由归档的“street_number”字段,我们希望对其进行格式化。使用正则表达式,我们想提取真正的“street_number”和“street_number_suffix”。
例如:17 b
,“street_number”将是 17
,而“street_number_suffix”将是 b
。
由于有十几种不同的模式,我很难正确调整正则表达式。我考虑使用 2 个不同的正则表达式,一个提取“street_number”,另一个提取“street_number_suffix”
这是我们想要格式化的一组详尽的模式和预期的输出:
# Extract street_number using PCRE
input street_number street_number_suffix
19-21 19 null
2 G 2 G
A null A
1 bis 1 bis
3 C 3 C
N°10 10 null
17 b 17 b
76 B 76 B
7 ter 7 ter
9/11 9 null
21.3 21 3
42 42 null
我知道我可以使用 \d+(?=\-)
调用匹配 任何数字直到连字符 的表达式。
它可以扩展为匹配 直到使用 \d+(?=\-|\/)
的连字符或斜杠 ,我想,一旦我将 \s
包含到此模式中,21
来自 19-21
将匹配。添加条件可能没那么简单,所以才请大家帮忙
谁能帮我解决这个问题?如果有帮助,请看这里的草稿:https://regex101.com/r/jGK5Sa/4
编辑:在我编辑的时候,这是我能找到的最接近的正则表达式:
(?:(N°|(?<!\-|\/|\.|[a-z]|.{1})))\d+
认为 N°10
的完整匹配不是 10
而是 N°10
(而且我们的 ETL 不支持捕获组,所以我不能使用 /......(\d+)/
)
要获取街道号码,您可以将模式更新为:
(?<![-/.a-z\d])\d+
说明
(?<!
负面回顾
[-/.a-z\d]
使用字符匹配任何列出的 class
)
关闭负面回顾
\d+
匹配 1+ 个数字
我们有一个多年来自由归档的“street_number”字段,我们希望对其进行格式化。使用正则表达式,我们想提取真正的“street_number”和“street_number_suffix”。
例如:17 b
,“street_number”将是 17
,而“street_number_suffix”将是 b
。
由于有十几种不同的模式,我很难正确调整正则表达式。我考虑使用 2 个不同的正则表达式,一个提取“street_number”,另一个提取“street_number_suffix”
这是我们想要格式化的一组详尽的模式和预期的输出:
# Extract street_number using PCRE
input street_number street_number_suffix
19-21 19 null
2 G 2 G
A null A
1 bis 1 bis
3 C 3 C
N°10 10 null
17 b 17 b
76 B 76 B
7 ter 7 ter
9/11 9 null
21.3 21 3
42 42 null
我知道我可以使用 \d+(?=\-)
调用匹配 任何数字直到连字符 的表达式。
它可以扩展为匹配 直到使用 \d+(?=\-|\/)
的连字符或斜杠 ,我想,一旦我将 \s
包含到此模式中,21
来自 19-21
将匹配。添加条件可能没那么简单,所以才请大家帮忙
谁能帮我解决这个问题?如果有帮助,请看这里的草稿:https://regex101.com/r/jGK5Sa/4
编辑:在我编辑的时候,这是我能找到的最接近的正则表达式:
(?:(N°|(?<!\-|\/|\.|[a-z]|.{1})))\d+
认为 N°10
的完整匹配不是 10
而是 N°10
(而且我们的 ETL 不支持捕获组,所以我不能使用 /......(\d+)/
)
要获取街道号码,您可以将模式更新为:
(?<![-/.a-z\d])\d+
说明
(?<!
负面回顾[-/.a-z\d]
使用字符匹配任何列出的 class
)
关闭负面回顾\d+
匹配 1+ 个数字