2010-07-26 186 views
4

如何返回正則表達式中字符串的前5位數?如何使用正則表達式返回前五位數

舉例來說,如果我有以下的文字輸入:

15203大街 公寓3 63110

我怎麼能只返回 「15203」。

我正在使用C#。

+0

您可能對特定編程語言的解決方案感興趣;你應該報告你正在使用哪種編程語言。 – kiamlaluno 2010-07-27 14:35:13

+0

如果輸入的格式會改變,那麼您可能需要考慮使用字符串操作,而不是模式匹配。 – 2010-07-27 15:11:49

回答

4

這將取決於你的正則表達式的味道和編碼語言(C#,PERL等),但在C#中你會做這樣的事情

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

注:我不知道這一點正則表達式匹配(這裏的其他人可能會有更好的),但基本上,因爲正則表達式本身不會「替換」任何東西,只會匹配模式,所以您必須查找任何非數字字符。一旦匹配了,就需要用空字符串的語言版本替換它(string.Empty或C#中的「」),然後獲取結果字符串的前5個字符。

2

您可以分別捕獲每個數字,然後將它們放在一起,例如,在Perl中:

$str =~ /(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)/; 
$digits = $1 . $2 . $3 . $4 . $5; 
2

我不認爲正則表達式是你想要的最好的工具。

正則表達式匹配的模式...你正在尋找的模式是「a(紐約州)數字」

你的邏輯外部的模式是「五場」。

因此,您要麼循環播放前五位數字匹配,要麼捕獲五位數字和merge them together

但看看那個Perl示例 - 那不是一種模式 - 它是一種重複五次的模式。

你可以通過正則表達式來做到這一點嗎?就像解析XML - 你可能會,但它不是正確的工具。

1

不知道這是由正則表達式最好解決,因爲它們用於字符串匹配,並且通常不用於字符串操作(以我的經驗)。但是,您可以撥打電話: strInput = Regex.Replace(strInput,「\ D +」,「」); 刪除所有非數字字符,然後只返回前5個字符。

如果你只是想要一個直接的正則表達式,爲你做所有這些,我不確定它存在沒有以類似的方式使用正則表達式類如上。

6

這實際上不是那種通過單一正則表達式理想解決的問題 - 正則表達式語言並不是特別爲表示。假設你在真實的語言編寫代碼(而不是一些拙劣的嵌入式使用正則表達式),你可以做也許(在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的建議工作得很好,但我很難想象一個情況,你可以做到這一點,但無法訪問其他語言設施:)

1

一種不同的方法 -

#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

要得到這些數字,應該是:$ temp =〜/(\ d {5})/ – Toto 2010-07-27 08:46:30

-1

結果=〜S/^(\ d {5})*/$ 1/

替換以數字開頭0-9的任何文本(\ d)正好5個{5},後面有任何數目的任何數字'*',其中$ 1是包含在()中的內容,即前五位數字。

如果你想要任何前5個字符。

結果=〜s/^({5})。*/$ 1/

使用任何編程語言,使用的是評估這一點。

即。

regex.replace(text, "^(.{5}).*", "$1");