【发布时间】:2020-09-17 16:50:08
【问题描述】:
有谁知道如何使用 sed 匹配这个 C++ 风格的正则表达式?特别是使用 (pattern) 和 \n?
将其分解为多个部分// ZIP code pattern: XXddddd-dddd and variants
regex pat (R"(\w{2}\s*\d{5}(−\d{4})?)");
例如,以下字符串将匹配 AB00000-0000,\1、\2、\3 将从模式空间打印适当的子字符串。
解决方案: 这是 sed 的答案,它占了前两个字符。
$ echo AB00000-0000 | sed 's/\([[:alpha:]]\{2\}\)[[:space:]]*\([[:digit:]]\{5\}\)\(-\([[:digit:]]\{4\}\)\)\{0,1\}/\1 \2 \4/'
AB 00000 0000
谢谢
【问题讨论】:
-
请分享输入数据和预期输出。您可以使用 `-E, -r` 选项来扩展正则表达式
-
您向我们展示的正则表达式模式以
\w{2}开头,这是强制性的,而不是可选的。您的示例字符串 00000-0000 将不与模式匹配。 -
除此之外,
\d是一个 perl 扩展,被grep(带有P标志)识别,但不能被sed或awk识别;您必须改用[[:digit:]]。为了能够在替换部分中引用[[:digit:]]{5},通过反向引用,您必须将其括在正则表达式的括号中。差不多就是这样。 -
@mathguy 你是对的。我根据您的评论更新了该匹配项。
-
\w不等同于[[:alpha:]],它等同于[[:alnum:]_]。
标签: sed