2010-07-26 188 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");