假设邮政编码采用 A0A 0AA 或 A0 0AA 的形式,其中 A 是任何字母,0 是任何数字,我编写了以下 sed 脚本来搜索网页以查找邮政编码。
s/\(([[:alnum:]]\{2,4\})\) \(([[:alnum:]]\{3\})\)/\1 \2/p
将第一部分 (A0A) 存储在第一区域,将第二部分 (0AA) 存储在第二区域。然后打印出找到的内容。但是,运行此当前未找到任何邮政编码。
有任何想法吗?谢谢
假设邮政编码采用 A0A 0AA 或 A0 0AA 的形式,其中 A 是任何字母,0 是任何数字,我编写了以下 sed 脚本来搜索网页以查找邮政编码。
s/\(([[:alnum:]]\{2,4\})\) \(([[:alnum:]]\{3\})\)/\1 \2/p
将第一部分 (A0A) 存储在第一区域,将第二部分 (0AA) 存储在第二区域。然后打印出找到的内容。但是,运行此当前未找到任何邮政编码。
有任何想法吗?谢谢
我意识到您在询问有效邮政编码的子集,但我希望这个英国邮政编码的解决方案会有所帮助。我会这样处理问题:
查看post-codes的格式,格式是
最后一部分的正则表达式很简单:[0-9][A-Z]{2}
第一部分是骗人的。我将问题一分为二:
[A-Z]{1,2}[0-9]{1,2}
,即一个或两个字母后跟一个或两个数字;[A-Z]{1,2}[0-9][A-Z]
,即一个或两个字母,然后是一个数字和一个字母。把它们放在一起:
sed -rn 's/.*(([A-Z]{1,2}[0-9]{1,2}|[A-Z]{1,2}[0-9][A-Z]) [0-9][A-Z]{2}).*/\1/p'
用你的正则表达式很难找到正确的东西。
你至少需要
但是,这仍然不能正确满足您的要求。它将匹配无效模式。你真正需要做的是
我没有给出如何做到这一点的具体例子,因为你要求“任何想法”。我假设你想尝试自己解决这个问题,给出正确的指示。
看起来你的括号有问题。以下对我有用:
$ sed -n 's/.*\b\([[:alnum:]]\{2,3\}\) \([[:alnum:]]\{3\}\)\b.*/\1 \2/p' <<< "here is a postcode: A0A 0AA. some more text"
A0A 0AA