使用正则表达式从地址中提取数字
Extract number from address with regex
我需要从法国地址中提取号码。
这是我的正则表达式:
\d+( |\d+|bte|-|boite|[\w] {1}|([a-z] ){1}){0,2}
regex101 示例:https://regex101.com/r/ZP8DSV/1
它可以部分工作,但不适用于所有行。
我需要提取号码+额外信息。
如果我拿这个列表,它应该给我这个(每一行):
|---------------------------------------|--------------|
| Original | Result |
|---------------------------------------|--------------|
| rue hovémont 3 | 3 |
| rue hovémont 3-5 | 3-5 |
| rue hovémont 3 5 | 3 5 |
| Rue hovémont 35 | 35 |
| Rue hovémont 46 A | 46 A |
| Rue hovémont 46 A1 | 46 A1 |
| 46 A1 Rue hovémont | 46 A1 |
| 46 A Rue hovémont | 46 A |
| Rue du pont de pierre, 1 | 1 |
| Chaussée d alseg 416 c | 416 c |
| Chaussée d alseg, 416 c | 416 c |
| Chaussée d alseg 416c | 416c |
| Chaussée d alseg, 416c | 416c |
| 416 c Chaussée d alseg | 416 c |
| 416 c, Chaussée d alseg | 416 c |
| 416c Chaussée d alseg | 416c |
| 416c, Chaussée d alseg | 416c |
| Square de la demi-lune 7 boite 5 | 7 boite 5 |
| 7 boite 5 Square de la demi-lune | 7 boite 5 |
| Rue aux laines 150/58 | 150/58 |
| Rue de la forêt, 95 | 95 |
| Chaussée d'anvers 294 | 294 |
| Avenue jean sébastien bach, 24 bte 32 | 24 bte 32 |
| 10 bte 1 rue des volontaires | 10 bte 1 |
| Rue du 5ème Tïme 5 bte 2 | 5 bte 2 |
| Rue du 5eme Tïme 5 bte 2 | 5 bte 2 |
| Rue du 5 eme Tïme 5 bte 2 | 5 bte 2 |
| Rue du 5 ème Tïme 5 bte 2 | 5 bte 2 |
| Rue du 1 er Tïme 5 bte 2 | 5 bte 2 |
| 20a Test Strasse | 20a |
|---------------------------------------|--------------|
你能帮我解决这个问题吗? :)
这里是一个有效的正则表达式,用于捕获在开头或结尾以数字开头的文本:
^\d\w*(?:\h+(?>boite|bte|\pL\d?|\d)\b)*|\h\K\d+\pL?(?:[-/]\d+|\h+(?:boite|bte|\pL\d?|\d+)\b)*$
对于 PHP 使用以下内容:
$re = '~^\d\w*(?:\h+(?>boite|bte|\pL\d?|\d)\b)*|\h\K\d+\pL?(?:[-/]\d+|\h+(?:boite|bte|\pL\d?|\d+)\b)*$~miu'
正则表达式详细信息:
^
: 开始
\d\w*
:匹配以数字开头的单词
(?:
: 启动一个非捕获组
\h+
:匹配 1+ 个空格
(?>boite|bte|\pL\d?|\d)
:匹配 boite
或 bte
或单个数字或字母(可选)后跟数字
\b
: 字边界
)*
:结束非捕获组。匹配该组中的 0 个或多个。
|
: 或
\h
:匹配一个空格
\K
: 重置匹配
\d+\pL?
:匹配 1+ 位后跟可选字母
\b
: 字边界
(?:[-/]\d+|\h+(?:boite|bte|\pL\d?|\d+)\b)*
:匹配剩余部分
$
:结束
我需要从法国地址中提取号码。
这是我的正则表达式:
\d+( |\d+|bte|-|boite|[\w] {1}|([a-z] ){1}){0,2}
regex101 示例:https://regex101.com/r/ZP8DSV/1 它可以部分工作,但不适用于所有行。
我需要提取号码+额外信息。
如果我拿这个列表,它应该给我这个(每一行):
|---------------------------------------|--------------|
| Original | Result |
|---------------------------------------|--------------|
| rue hovémont 3 | 3 |
| rue hovémont 3-5 | 3-5 |
| rue hovémont 3 5 | 3 5 |
| Rue hovémont 35 | 35 |
| Rue hovémont 46 A | 46 A |
| Rue hovémont 46 A1 | 46 A1 |
| 46 A1 Rue hovémont | 46 A1 |
| 46 A Rue hovémont | 46 A |
| Rue du pont de pierre, 1 | 1 |
| Chaussée d alseg 416 c | 416 c |
| Chaussée d alseg, 416 c | 416 c |
| Chaussée d alseg 416c | 416c |
| Chaussée d alseg, 416c | 416c |
| 416 c Chaussée d alseg | 416 c |
| 416 c, Chaussée d alseg | 416 c |
| 416c Chaussée d alseg | 416c |
| 416c, Chaussée d alseg | 416c |
| Square de la demi-lune 7 boite 5 | 7 boite 5 |
| 7 boite 5 Square de la demi-lune | 7 boite 5 |
| Rue aux laines 150/58 | 150/58 |
| Rue de la forêt, 95 | 95 |
| Chaussée d'anvers 294 | 294 |
| Avenue jean sébastien bach, 24 bte 32 | 24 bte 32 |
| 10 bte 1 rue des volontaires | 10 bte 1 |
| Rue du 5ème Tïme 5 bte 2 | 5 bte 2 |
| Rue du 5eme Tïme 5 bte 2 | 5 bte 2 |
| Rue du 5 eme Tïme 5 bte 2 | 5 bte 2 |
| Rue du 5 ème Tïme 5 bte 2 | 5 bte 2 |
| Rue du 1 er Tïme 5 bte 2 | 5 bte 2 |
| 20a Test Strasse | 20a |
|---------------------------------------|--------------|
你能帮我解决这个问题吗? :)
这里是一个有效的正则表达式,用于捕获在开头或结尾以数字开头的文本:
^\d\w*(?:\h+(?>boite|bte|\pL\d?|\d)\b)*|\h\K\d+\pL?(?:[-/]\d+|\h+(?:boite|bte|\pL\d?|\d+)\b)*$
对于 PHP 使用以下内容:
$re = '~^\d\w*(?:\h+(?>boite|bte|\pL\d?|\d)\b)*|\h\K\d+\pL?(?:[-/]\d+|\h+(?:boite|bte|\pL\d?|\d+)\b)*$~miu'
正则表达式详细信息:
^
: 开始\d\w*
:匹配以数字开头的单词(?:
: 启动一个非捕获组\h+
:匹配 1+ 个空格(?>boite|bte|\pL\d?|\d)
:匹配boite
或bte
或单个数字或字母(可选)后跟数字\b
: 字边界
)*
:结束非捕获组。匹配该组中的 0 个或多个。|
: 或\h
:匹配一个空格\K
: 重置匹配\d+\pL?
:匹配 1+ 位后跟可选字母\b
: 字边界(?:[-/]\d+|\h+(?:boite|bte|\pL\d?|\d+)\b)*
:匹配剩余部分$
:结束