如何使用正则表达式返回前五位数

时间:2010-07-26 20:31:57

标签: regex

如何在正则表达式中返回一串字符的前5位数?

例如,如果我输入以下文字:

15203 Main Street 公寓3 63110

我怎样才能返回“15203”。

我正在使用C#。

7 个答案:

答案 0 :(得分: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 :(得分:4)

这将取决于你的正则表达式和编码语言(C#,PERL等)的味道,但在C#你会做类似的事情

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

注意:我不确定Regex匹配(其他人可能有更好的匹配),但基本上因为Regex本身不“替换”任何东西,只匹配模式,你必须寻找任何非 - 数字字符;一旦你匹配了它,你需要用你的语言版本的空字符串(string.Empty或C#中的“”)替换它,然后获取结果字符串的前5个字符。

答案 2 :(得分:2)

您可以分别捕获每个数字,然后将它们放在一起,例如在Perl:

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

答案 3 :(得分:2)

我认为正则表达式不是你想要的最佳工具。

正则表达式匹配模式...您正在寻找的模式是“a(ny)数字”

你在模式外部的逻辑是“五个匹配”。

因此,您要么循环前五位数匹配,要么捕获五位数和merge them together

但是看看Perl的例子 - 这不是一种模式 - 它是一种重复五次的模式。

你能通过正则表达式做到这一点吗?就像解析XML一样 - 你可能会,但它不是正确的工具。

答案 4 :(得分:1)

不确定这是否可以通过正则表达式解决,因为它们用于字符串匹配,通常不用于字符串操作(根据我的经验)。

但是,您可以拨打电话:    strInput = Regex.Replace(strInput,“\ D +”,“”); 删除所有非数字字符,然后只返回前5个字符。

如果您只想要一个直接的正则表达式来完成所有这些,我不确定它是否存在而不使用上述类似的方式使用正则表达式类。

答案 5 :(得分: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

答案 6 :(得分:-1)

结果= ~s / ^(\ d {5})。* / $ 1 /

将任何以数字0-9(\ d)开头的文本替换为其中5个{5}以及任何数量的任何后面的任何数字'。*'和$ 1,这是()中包含的内容是前五位数。

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

结果= ~s / ^(。{5})。* / $ 1 /

使用您正在使用的任何编程语言来评估此内容。

即。

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