2013-09-11 3 views
0

Я пытаюсь использовать Regex для проекта, который я делаю для работы. У меня есть набор чисел, который выглядит следующим образом:Пропуск нескольких номеров (не жестко закодированных)

23 14 62 -121 98 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
24 13 64 -118 101 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
19 10 65 -124 93 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
19 11 62 -130 93 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
16  2 65 -127 83 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
18  1 68 -127 86 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
29 -1 64 -129 92 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
22  2 63 -131 87 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
16 13 62 -130 91 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
15  6 66 -131 87 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
16  2 62 -137 80 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
16 -5 63 -133 74 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
24 -1 60 -135 83 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
15 11 59 -137 86 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
11  8 64 -131 83 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
19 10 64 -130 92 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
20 11 65 -136 96 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
20  8 59 -136 87 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
18 13 59 -135 90 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
18 10 60 -138 88 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
23  6 60 -133 88 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
20 10 57 -127 87 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
23  4 61 -127 88 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
14 -3 63 -131 75 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
16 -5 62 -129 73 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
25 -6 62 -127 80 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
21  2 60 -129 83 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
14  3 65 -133 81 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
14  8 64 -132 86 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
19 11 59 -131 89 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
28  5 59 -129 93 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
29 -3 56 -130 82 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
24  0 58 -128 82 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
28 12 65 -128 104 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
25  4 65 -123 94 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
17 -1 61 -126 77 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 
18  2 62 -130 82 -0.0 -0.1 0.0 -0.2 165 60.00 .... ... 

Я хочу, чтобы получить 10-й номер в каждой строке (165) с только один или два регулярных выражений заявления. Время от времени изменяется с 165, так что я не могу его жестко закодировать. До сих пор у меня есть:

([+-]{0,1}[0-9]{1,5}) 
([+-]{0,1}[0-9]{1,5}) 
([+-]{0,1}[0-9]{1,5}) 
([+-]{0,1}[0-9]{1,5}) 
([+-]{0,1}[0-9]{1,5}) 
([+-]{0,1}[0-9]{1,}[.]{0,1}[0-9]{0,5})|([+-]{0,1}[.]{1,1}(?=[0-9])[0-9]{0,5})) 
([+-]{0,1}[0-9]{1,}[.]{0,1}[0-9]{0,5})|([+-]{0,1}[.]{1,1}(?=[0-9])[0-9]{0,5})) 
([+-]{0,1}[0-9]{1,}[.]{0,1}[0-9]{0,5})|([+-]{0,1}[.]{1,1}(?=[0-9])[0-9]{0,5})) 
([+-]{0,1}[0-9]{1,}[.]{0,1}[0-9]{0,5})|([+-]{0,1}[.]{1,1}(?=[0-9])[0-9]{0,5})) 
([+-]{0,1}[0-9]{1,5}) 

который, очевидно, не 1 или 2 шага это 10 плюс это дает мне 9 очков я не хочу.

Эта проблема была решена, но теперь новая проблема возникла:

Я думал, что:

(?#<INS:5>) 
^.{53}([+-]?\d+) 
\.\.\.\. \.\.\. 
(?#<INS:5>) 
^.{53}([+-]?\d+) 
\.\.\.\. \.\.\. 
(?#<INS:5>) 
^.{53}([+-]?\d+) 
\.\.\.\. \.\.\. 

фиксированная моя проблема, но оказывается, этот код перерывы в следующей ситуации:

9486  9 68 -133 9562 -0.0 -0.1 0.0 -0.2 106 60.00 .... ... 
    9455  3 63 -129 9521 -0.0 -0.1 0.0 -0.2 106 60.00 .... ... 
    9417  3 64 -132 9485 -0.0 -0.1 0.0 -0.2 89 60.00 .... ... 
    9367  3 60 -129 9431 -0.0 -0.1 0.0 -0.2 89 60.00 .... ... 
    9305 12 56 -131 9373 -0.0 -0.1 0.0 -0.2 89 60.00 .... ... 
    9237 12 66 -135 9315 -0.0 -0.1 0.0 -0.2 89 60.00 .... ... 
    9170  2 65 -129 9238 -0.0 -0.1 0.0 -0.2 89 60.00 .... ... 
    9111  4 62 -127 9177 -0.0 -0.1 0.0 -0.2 89 60.00 .... ... 
    9041 -0 58 -126 9099 -0.0 -0.1 0.0 -0.2 89 60.00 .... ... 
    8969  6 57 -129 9032 -0.0 -0.1 0.0 -0.2 89 60.00 .... ... 
    8887  9 60 -132 8956 -0.0 -0.1 0.0 -0.2 73 60.00 .... ... 
    8802  5 62 -131 8869 -0.0 -0.1 0.0 -0.2 73 60.00 .... ... 
    8720  1 64 -132 8785 -0.0 -0.1 0.0 -0.2 73 60.00 .... ... 
    8634  9 66 -137 8710 -0.0 -0.1 0.0 -0.2 73 60.00 .... ... 

Когда 10-ое число опускается ниже 100, код выходит из строя. Есть ли способ сделать это, если он не сломается на 10 и 1?

+2

Укажите, пожалуйста, язык, так как ответ будет отличаться. – jmstoker

+0

добавьте еще теги –

+0

'awk '{print $ 10}' file' сделает это на Linux – Bernhard

ответ

1

Вы можете попробовать добавить [ ]* в регулярном выражении. Это должно хватить 106 или 89. Все, что он делает, захватывает дополнительное пространство, если оно существует до номера.

(?#<INS:5>) 
^.{53}[ ]*([+-]?\d+) 
\.\.\.\. \.\.\. 
(?#<INS:5>) 
^.{53}[ ]*([+-]?\d+) 
\.\.\.\. \.\.\. 
(?#<INS:5>) 
^.{53}[ ]*([+-]?\d+) 
\.\.\.\. \.\.\. 
+0

Ты спасатель жизни! – Austin

0

это работало для меня, просто используя одну строку в качестве примера.

var someString="9486  9 68 -133 9562 -0.0 -0.1 0.0 -0.2 106 60.00 0909"; 
    var getum =someString.match(/[\-\+]?[0-9]*\.?[0-9]+/g); 
    getnum[9] // gives 106 

Примечание: с помощью JavaScript

Смежные вопросы