Regex 正则表达式匹配两个数字,但不匹配其他数字

Regex 正则表达式匹配两个数字,但不匹配其他数字,regex,grep,Regex,Grep,获取文件的以下内容: "52245" "528" "06156903" "52246" "530" "00584709" "52245" "528" "06156903" "52246" "530" "00584709" 除了其他模式外,什么模式可以同时匹配52245和52246 ^(52245|52246)$ 您可以使用此选项。只能匹配这两个数字,而不能匹配其他数字的选项: ^\"5224[56]\"$ 现在,如果您正在寻找更一般的东西(例如,任何带有5位数字的数字),您将需要 ^\"\d

获取文件的以下内容:

"52245" "528" "06156903" "52246" "530" "00584709" "52245" "528" "06156903" "52246" "530" "00584709" 除了其他模式外,什么模式可以同时匹配52245和52246

^(52245|52246)$

您可以使用此选项。

只能匹配这两个数字,而不能匹配其他数字的选项:

^\"5224[56]\"$
现在,如果您正在寻找更一般的东西(例如,任何带有5位数字的数字),您将需要

^\"\d{5}\"$
我假设引号(
)是文件的一部分。如果不是,请从表达式中省略
\”
部分

您需要的特定grep表达式如下所示:

grep -E "^\"[[:digit:]]{5}\"$" filename
或者从评论中提出建议:

grep -P "^\"\d{5}\"$" filename
我已经测试了两个,他们在我的机器上工作

^"5224[56]"$

^"5224(5|6)"$

^"52{2}4[56]"$

^"(52245|52246)"$

...

您应该根据要表达的语义来使用正则表达式。如果要查找两个任意数字,请使用
^”(52245 | 52246)$
。如果这些数字有任何意义——一个类型代码或类似的东西——我会坚持使用
^“5224(5 | 6)”$

技术正确。我几乎可以肯定他在找别的东西,但没有具体说明是什么。@mmyers-Oops,没有看到“grep”标签。我提供了一个java正则表达式,其中不使用引号。您应该编辑和细化这个问题,并说明为什么“52245”和“52246”是“好”数字(5位数,以522开头,衣阿华州的邮政编码),以及为什么其他数字不是。正则表达式基于模式。如果你不告诉我们模式是什么,我们只能猜测,很可能是错误的我想这就把我排除在外了(Waverly,IA 50677)是的,引号是文件的一部分。我是这样使用grep的:grep^\“\d{5}\”$myfile它不返回任何内容,我也尝试过使用-G和-E选项有什么问题吗?\d是Perl风格的特殊字符。请尝试grep-P^\“\d{5}\”$。我认为还有其他方法可以匹配不带-P和\d的数字,但它们不值得。不过,要小心从shell中删除所有内容。在bash中,这意味着在regexp周围使用单引号。我不确定\d{}是否正确…我使用[[:digit:][]\{5\}..并且您应该在表达式周围加上“,(也使用grep和-e)。David Berger,我已经将您的建议包括在答案中。好提示。我直到现在才知道-P。