Как вернуть первые пять цифр с помощью регулярных выражений - PullRequest
4 голосов
/ 27 июля 2010

Как вернуть первые 5 цифр строки символов в регулярных выражениях?

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

15203 Main Street Apartment 3 63110

Как мне вернуть только "15203".

Я использую C #.

Ответы [ 7 ]

6 голосов
/ 27 июля 2010

Это на самом деле не та проблема, которая в идеале решается с помощью подхода с одним регулярным выражением - язык регулярных выражений просто не особенно означает для него .Предполагая, что вы пишете код на реальном языке (а не какое-то непродуманное встроенное использование регулярных выражений), вы могли бы сделать это (примеры на perl)

# Capture all the digits into an array
my @digits = $str =~ /(\d)/g;
# Then take the first five and put them back into a string
my $first_five_digits = join "", @digits[0..4];

или

# Copy the string, removing all non-digits
(my $digits = $str) =~ tr/0-9//cd;
# And cut off all but the first five
$first_five_digits = substr $digits, 0, 5;

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

4 голосов
/ 27 июля 2010

это будет зависеть от вашего вида Regex и языка кодирования (C #, PERL и т. Д.), Но в C # вы будете делать что-то вроде

string rX = @"\D+";
Regex.replace(input, rX, "");
return input.SubString(0, 5);

Примечание: я не уверен насчет этого Regexсопоставлять (другие здесь могут иметь лучший), но в основном, поскольку само Regex ничего не «заменяет», а только сопоставляет шаблоны, вам придется искать любые нецифровые символы;как только вы сопоставите это, вам нужно будет заменить его языковой версией пустой строки (string.Empty или "" в C #), а затем получить первые 5 символов полученной строки.

2 голосов
/ 27 июля 2010

Я не думаю, что регулярное выражение - лучший инструмент для того, что вы хотите.

Регулярные выражения должны соответствовать шаблонам ... шаблон, который вы ищете, это "(ny) цифра"

Ваша логика, внешняя по отношению к шаблону, "пять совпадений".

Таким образом, вы либо хотите перебрать первые пять цифр совпадений, либо захватить пять цифр и объединить их вместе .

Но посмотрите на этот пример Perl - это не один шаблон - это один шаблон, повторенный пять раз.

Можете ли вы сделать это с помощью регулярного выражения? Точно так же, как синтаксический анализ XML - вы, вероятно, могли бы, но это не тот инструмент.

2 голосов
/ 27 июля 2010

Вы можете захватить каждую цифру отдельно и затем сложить их вместе, например, в Perl:

$str =~ /(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)/;
$digits = $1 . $2 . $3 . $4 . $5;
1 голос
/ 27 июля 2010

Другой подход -

#copy over
$temp = $str;
#Remove non-numbers
$temp =~ s/\D//;
#Get the first 5 numbers, exactly.
$temp =~ /\d{5}/;
#Grab the match- ASSUMES that there will be a match.
$first_digits = $1
1 голос
/ 27 июля 2010

Не уверен, что это лучше всего решать с помощью регулярных выражений, поскольку они используются для сопоставления строк, а обычно не для манипулирования строками (по моему опыту).

Однако вы можете позвонить: strInput = Regex.Replace (strInput, "\ D +", ""); удалить все нечисловые символы, а затем просто вернуть первые 5 символов.

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

0 голосов
/ 27 июля 2010

результат = ~ s / ^ (\ d {5}). * / $ 1 /

Заменить любой текст, начинающийся с цифры 0-9 (\ d), ровно 5 изих {5} с любым числом чего-либо после него '. *' с $ 1, который является тем, что содержится в (), то есть первые пять цифр.

, если вам нужны первые 5 символов.

result = ~ s / ^ (. {5}). * / $ 1 /

Используйте любой язык программирования, который вы используете для оценки этого.

т.

regex.replace(text, "^(.{5}).*", "$1");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...