Якорям ^
и $
требуется, чтобы шаблон соответствовал всей строке. Вы можете заключить шаблон в \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"