r - 用于识别英国邮政编码的 R 正则表达式
问题描述
我的问题与此类似,但我正在寻找R
特定的东西。我有一个包含数万个地址的data.frame,需要提取邮政编码。邮政编码位于英国,格式为 {LETTER_LETTER_DIGIT LETTER_LETTER_DIGIT}。类似于以下内容:
"8, Longbow Close,\r\nHarlescott Lane,\r\nShrewsbury,\r\nEngland,\r\nSY1 3GZ"
我使用了此代码的变体stringr
但无济于事:
str_extract('^(\\[Gg]\\[Ii]\\[Rr] 0\\[Aa]{2})|(((\\[A-Za-z]\\[0-9]{1,2})|((\\
[A-Za-z]\\[A-Ha-hJ-Yj-y]\\[0-9]{1,2})|((\\[AZa-z]\\[0-9]\\[A-Za-z])|(\\[A-Za-
z]\\[A-Ha-hJ-Yj-y]\\[0-9]?\\[A-Za-z]))))\\[0-9]\\[A-Za-z]{2})$',alfa$Address)
解决方案
和^
锚点$
要求模式匹配整个字符串。您可以包装模式以\b(?:<pattern>)\b
将这些代码匹配为整个单词(\b
是单词边界)。此外,字符类被“破坏”,因为您转义了它们的[
起始括号(\[
匹配文字[
字符)。另外,交换参数,第一个是输入,第二个是正则表达式。此外,要获得所有匹配项,您需要使用str_extract_all
而不是str_extract
.
您可以像这样修复代码:
library(stringr)
txt <- "8, Longbow Close,\r\nHarlescott Lane,\r\nShrewsbury,\r\nEngland,\r\nSY1 3GZ"
pattern <- "\\b(?:([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z]))))\\s?[0-9][A-Za-z]{2}))\\b"
str_extract_all(txt, pattern)
# => [[1]]
# [1] "SY1 3GZ"
推荐阅读
- php - 如何在 CRUD 之前检查用户是否拥有资源
- d3.js - d3.js 中路径的颜色部分根据序数值使用不同的颜色
- android - 交易或启动新活动时如何创建 AlertDialog?
- r - 将带有逗号的字符串转换为R中的向量
- javascript - 在fusion360中使用坐标在空间中的每个点绘制球体
- git - 如何在 git 存储库之间共享 swagger 文档
- spring-boot - 无法使用 Webflux 返回大型 JSON 响应 - netty 和 jetty 均失败
- angular - 已部署的 Angular 8 应用程序在初始路由 url 上出现错误
- python - if - range 命令有问题
- asp.net-mvc - asp custom format for string