如何在正则表达式中返回一串字符的前5位数?
例如,如果我输入以下文字:
15203 Main Street 公寓3 63110
我怎样才能返回“15203”。
我正在使用C#。
答案 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");