如何在RoR项目中用正则表达式查找有效澳大利亚邮政编码
在Ruby on Rails中提取澳大利亚邮政编码的解决方案
嘿,我来帮你搞定RoR项目里提取澳大利亚邮政编码的事儿!首先咱们先明确规则:澳大利亚的邮政编码是4位数字,部分场景下可能会带空格(比如6100或61 00),不过标准格式是无空格的4位数字。
针对你提供的字符串数组,咱们可以按以下步骤处理:
步骤1:拼接零散的字符串片段
你给出的是拆分后的字符串数组,首先得把它们拼成完整的文本,这样才能统一搜索:
# 你的原始字符串数组 raw_strings = ["", "\"ParsedText\":TVR ", "PURCHASE ", "TOTAL ", "APPROVED ", "05/02/18 20.51 ", "TOTAL ", "EFT ", "CHANGE ", "Taxable Iteus ", "TOTAL includes GST ", "OTHER SAVINGS ", "Woolworths ", "fresh people ", "VICTORIA PARK PH: (08) 6318 9975 ", "Your Store Manager is: Mark ", "Your Assistant Store Manager is: Nick ", "Your Customer Service M..."] # 拼接成完整文本 full_text = raw_strings.join(" ")
步骤2:用正则表达式匹配邮政编码
基础版的正则可以匹配所有4位数字,但要注意避免误匹配电话、时间里的数字(比如你提供的片段里的6318是电话的一部分)。如果只是通用提取,用这个:
# 匹配独立的4位数字(\b是单词边界,避免匹配更长数字的一部分) australian_postcode_regex = /\b\d{4}\b/ # 提取所有匹配的邮编并去重 postcodes = full_text.scan(australian_postcode_regex).uniq
进阶:精准匹配特定地区的邮编
如果你知道目标文本里的邮编属于某个州(比如你片段里的VICTORIA PARK在西澳大利亚州),可以通过限定邮编范围来减少误匹配。西澳的邮编范围是6000-6799,对应的正则是:
# 匹配西澳的4位邮编 wa_postcode_regex = /\b6[0-7]\d{2}\b/ postcodes = full_text.scan(wa_postcode_regex).uniq
另外,如果文本里有带空格的邮编(比如61 00),可以调整正则为/\b\d{2}\s?\d{2}\b/,这样既能匹配无空格的,也能匹配带空格的格式。
注意:你当前提供的片段里没有明确的邮政编码,但如果你的完整文本里存在符合规则的邮编,上面的代码就能准确提取出来啦!
内容的提问来源于stack exchange,提问作者awsm sid
相关产品推荐
相关产品推荐

