2014-12-15 3 views
0

Я пытаюсь устранить число из следующего текста:Reqexp в Perl не заменяя целые числовые символы, но оставляет последнюю цифру, как это

This is a test for eliminating numbers from the text, the numbers are 3 1044 232 10.5 

с использованием кода Perl для регулярных выражений

$split1[$j] =~ s/\A[0-9]+\B/ /g; 

я должен получать выход в

This is a test for eliminating numbers from the text, the numbers are 10.5 

в 10.5 не является чисто числом, но и имеет ре riod к нему. Но вывод, который я получаю

This is a test for eliminating numbers from the text, the numbers are 3 4 2 0.5 
+5

\ A означает «начало строки», так что я не очень понимаю, как возможно, вы можете получить заявленный результат, применяя, что регулярное выражение для строки в верхней части. Во всяком случае, \ B означает «не граница слова», поэтому номера, находящиеся непосредственно перед границами слов, исключаются. –

+0

Мне очень жаль, Кайл, я забыл упомянуть о цикле for, который идет выше этого. Искренние извинения Но как я могу получить желаемые результаты, как я пробовал использовать его без \ B, но в этом случае еще одна цифра не читается и появляется в тексте результата – Rajinder

+0

Когда я пытаюсь запустить регулярное выражение как с \ A и \ B удалены в вашей строке примера в целом, все номера удаляются (как и ожидалось). Итак, в коде, который вы не отправили, что-то еще происходит, что бесполезно для вас. –

ответ

1

Как уже говорилось выше, вы по-прежнему держать некоторые цифры, потому что вы используете \B, что означает «не границу слова», так что все числа, которые находятся впереди границы слов сохраняются. При этом я не получаю результат, который вы указали в своей строке, потому что вы используете \A. Регулярное выражение не найдет ни одного из ваших номеров, потому что вы сказали ему искать его «в начале строки» с \A.

Если вы просто хотите избавиться от целых чисел, независимо от того, где в строке они происходят, вы можете использовать один из этих двух:

$split1[$j] =~ s/[0-9]+//g; 
$split1[$j] =~ s/\d+//g; 

регулярное выражение, которое будет найти любое число, в том числе с плавающей точкой, будет выглядеть примерно так:

$split1[$j] =~ s/[-+]?[0-9]*\.?[0-9]+//g; 
+0

Thanx Prawn, но как насчет буквенных символов, я хочу, чтобы они остались нетронутыми – Rajinder

+0

Извините, я не думал о буквенно-цифровых словах, потому что в вашем примере их не было. 's/\ b [- +]? [0-9] * \.? [0-9] + \ b // g;' не ударил буквенно-цифровые слова. хотя я должен сказать, что регулярное выражение @mpapec, вероятно, более точное. – Prawn

+0

@Borodin спасибо за редактирование. один из моих первых ответов на этом форуме, так что приятно видеть, как должен выглядеть ответ. – Prawn