【问题标题】:Building regex for address validation为地址验证构建正则表达式
【发布时间】:2018-02-06 06:53:46
【问题描述】:

我正在尝试构建一个满足这些要求的正则表达式

编号街道名称

数字 - 至少一位数字,后跟任意数量的附加数字 街道名称 - 任意数量的单词(至少一个),每个单词以大写字母或数字开头,后跟任意数量的大小写字母、数字或句点 (.)。

有效字符串的示例是

“123 牛奶厂”

“第 178 大道 15090 号”

“27 Hilltop Dr. Apt. 7”

无效字符串示例

“F52 牛奶厂”

“156A 神奇街”

“56 个样本 Ln。”

“1838 Dykhouse Ave.”

                 ^ extra space on the end

“1832 第七街”

对正则表达式的任何帮助将不胜感激

我尝试了以下方法:

[A-Z][a-z]+,\s[A-Z][a-z]+[^\s](\s[A-Z].)

【问题讨论】:

  • 到目前为止你尝试了什么?
  • [A-Z][a-z]+,\s[A-Z][a-z]+[^\s](\s[A-Z].)

标签: regex bash


【解决方案1】:

你可以试试:

^\d\d*(\s(?:[A-Z0-9][A-Za-z0-9.]*)){1,}$

解释:

  1. ^ 行首
  2. \d\d* 一位数字后跟可选的零位或多位数字
  3. \s(?:[A-Z0-9][A-Za-z0-9.]*) 表示空格后​​跟大写字母 或至少一个数字,然后是 A-Za-z0-9。零次或多次(*) 上述序列必须出现 1 次或更多次 {1,}
  4. $ 字符串结尾

Regex 101 Demo

【讨论】:

  • @arashid 我已经添加了解释,如果有不清楚的地方请告诉我... ps \d\d​​ 等同于 \d+ 您也可以替换它
  • 我得到了这个,但我也有另一个错误。
  • @PJProudhon 是的,这是肯定的......但详细的 {1,} 让新的正则表达式用户了解他是否可能需要它两次或更多,而不是他可能只用 2 替换 1跨度>
  • 这是答案中正则表达式的较短版本:^\d+( [A-Z\d][A-Za-z\d.]*)+$。我所做的唯一更改是将\s 更改为常规空格,因为\s 匹配所有空白字符,包括制表符和换行符。
  • 这在 BASH 中不起作用,你能给我一个在 BASH 中起作用的吗?
【解决方案2】:
^\d+ [\dA-Z](?: *[\da-zA-Z.])+$
  • \d+ - 一位或多位数字
  • [\dA-Z] - 数字或大写字母
  • (?: * - 非捕获组,有零个或多个空格
  • [\da-zA-Z.] - 数字、大写字母或小写字母
  • )+ - 非捕获组的结束。该组应出现 1 次或多次

Demo

【讨论】:

  • 这在 BASH 中不起作用,你能给我一个在 BASH 中起作用的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-17
  • 2012-07-12
  • 2011-07-14
  • 1970-01-01
  • 2018-04-28
  • 1970-01-01
相关资源
最近更新 更多