0

这似乎是一个基本问题,但我已经进行了大量搜索,但找不到答案。

假设我有很多组数字

9-9-9
999
123
1-23
12-3
444
55-5

我想对所有数字进行 egrep,现在我可以做到这一点的一种方法是设置 egrep 并将正则表达式合并为所有可能性

egrep '[0-9][0-9[0-9]|[0-9][-][0-9][-][0-9]' 以此类推

有没有办法在我的正则表达式中本质上说 [0-9 或 NULL 或 -] 字符?所以我可以写一个没有联合的正则表达式 [0-9][0-9-NULL][0-9-NULL][0-9-NULL][0-9-NULL][0-9NULL] 并且有它返回所有组?

所以它会搜索的组如下
- 第一个 0-9
- 第二个 0-9, -, NULL
- 第三个 0-9, -, NULL
- 第四个 0-9, -, NULL
- 第五个 0-9, -, NULL
- 第六个 0-9,NULL

任何帮助表示赞赏。

4

5 回答 5

2

排除“空”部分,因为我不太确定你的意思,你对 egrep 使用了一个简单的正则表达式:

[0-9](-?[0-9]){2}

-?表示 0 或 1 次出现-

{2}表示前一组重复两次。将其更改+为至少一次。

于 2013-06-13T17:41:00.173 回答
1

尝试一个正则表达式

\d[-0-9]+

破折号或 0-9 一次或多次

编辑

或者它必须以数字开头和结尾(或只有一位数字

\d[-0-9]*\d|\d

编辑

或者总是三位数

\d{3}|\d-\d{2}|\d{2}-d
于 2013-06-13T17:40:01.467 回答
0

我认为egrep '[0-9][0-9\-]*'应该给出你想要的行为。

于 2013-06-13T17:41:07.473 回答
0

也许egrep '^[0-9]+(-[0-9]+){0,5}$'

  • 一些数字,后跟最多 5 组(连字符和数字)
  • 锚定在线路的两端。
于 2013-06-13T17:53:49.140 回答
0

很肯定(-?[0-9])+会工作

它会找到一个或多个前面可能有 a 的数字-,尽管我也不确定你所说的 NULL 是什么意思

于 2013-06-13T17:57:56.533 回答