我需要一个与大块文本中的以下字符串匹配的正则表达式:
California 94558
California 94558-0000
North Dakota 88888
ND 88888-8888
状态和zip之间需要双重和单个空格。
到目前为止,我有这个:
/([a-zA-Z]+(\s+[a-zA-Z]+))\s+(\d{5}([\-]\d{4})?)/g
但我不能让它与单字状态一起工作。我还想添加加拿大邮政编码,但我想我不会在这里混淆。
答案 0 :(得分:2)
你其实很亲密。你的正则表达式只需要指定空格第二个单词组合是可选。我只添加了一个?
来使其正常工作:
([a-zA-Z]+(\s+[a-zA-Z]+)?)\s+(\d{5}([\-]\d{4})?)
^ there
一种稍微简洁的方法是禁止捕获所有匹配的组,然后选择两个最有用的组:
([a-zA-Z]+(?:\s+[a-zA-Z]+)?)\s+(\d{5}(?:[\-]\d{4})?)
现在,第1组将始终包含状态 - 一个或两个单词 - 而第2组将始终包含邮政编码。
另请参阅regex101 demo。
答案 1 :(得分:0)
如果您总是期待state state zip
或state zip
您可以将此细分^\w+\s+(\w|\d|\s)+-?\d+
与mg
标记分开,以进行多行和全局正则表达式匹配。
答案 2 :(得分:0)