求求求求求 正则表达式:x位数字左补空格或右补空格至5个长度!

superdc 2005-05-24 10:25:47
求求求求求 正则:x位数字左补空格或右补空格至5个长度!

请大虾们出招啊~~~ 白银一百两先送上~
...全文
393 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
superdc 2005-06-17
  • 打赏
  • 举报
回复
放分没有先后和多少之分 我只是随便给 怎么把100分完就好了 呵呵
superdc 2005-06-17
  • 打赏
  • 举报
回复
又改了 改成 (?! {5}).{5} 这才是偶要的 活活 今天结帐
superdc 2005-06-05
  • 打赏
  • 举报
回复
最后结论


.*?\d+.*? 测试过 速度非常快

不做长度限制了 因为我不知道怎么做 而且我的业务里面已经限制了长度了 谢谢楼上各位 暂时不结帐 等大家都看到了再来 学习嘛 呵呵
xyzxyz1111 2005-05-29
  • 打赏
  • 举报
回复
$_ = " 111";
$max_length = 100;

if(/^(.{0,4}|.{6, $max_length}|( *\d+)|(\d+ *))$/ and ($2 or $3)){
print "OK\n";
}

这个确实“使用一个正则 一次匹配正个串”$2 和$3变量是匹配的附加结果。
fibbery 2005-05-28
  • 打赏
  • 举报
回复
我的理解是,楼主有一个很长的字符串,其中有一个位置上是数字,他要处理的是字符串中的数字这一部分。
superdc 2005-05-28
  • 打赏
  • 举报
回复
对 很长的一字符串
使用一个正则 一次匹配正个串
我所问的这个地方是其中一部分 这部分就是 shhgs() 所说“我大约知道你的意思了,是不是给一个5字符的字符串,判断是不是全部由数字和空格组成,其中空格可以在数字的前面,也可以在数字的后面,但就是不能夹在数字当中?
” 但 if (length $_ == 5) && ($_ =~/[ ]*\d+|\d+[ ]*/) 这个满足不了我的要求 “使用一个正则 一次匹配正个串 ”


大家继续 这下我估计能懂了吧?? 呵呵
shhgs 2005-05-27
  • 打赏
  • 举报
回复
我大约知道你的意思了,是不是给一个5字符的字符串,判断是不是全部由数字和空格组成,其中空格可以在数字的前面,也可以在数字的后面,但就是不能夹在数字当中?

如果是这个,那太简单了。

if (length $_ == 5) && ($_ =~/[ ]*\d+|\d+[ ]*/)
brianlu 2005-05-27
  • 打赏
  • 举报
回复
if( /^(\w|[ ]){5}$/ && /(^\w{1,5}[ ]*$)|(^[ ]{0,4}\w+$)/)

请搂主看清楚我写的if语句: /^(\w|[ ]){5}$/ && .........

zgxbliss 2005-05-27
  • 打赏
  • 举报
回复
不说不足五位补空格的吗?要定长是五位的话,先判断字符串长度为5,再用正则式匹配就行了呗,
没有必要非用一个正则式来做吧
fibbery 2005-05-27
  • 打赏
  • 举报
回复
superdc;
本来我觉得自己已经明白了,可现在我又被你说糊涂了。我没能理解你说的是什么。你举一个你在实际中能够遇到的例子,并给出预期结果。
zgxbliss 2005-05-27
  • 打赏
  • 举报
回复
可以从程序结构上改善啊,把每个字段的检验做成一个函数,只要逻辑清楚,容易读懂就可以了吧
superdc 2005-05-27
  • 打赏
  • 举报
回复
xyzxyz1111(程序员的自我修养)所说的正是我目前正在使用的表达式, (if(/^(\d\s{4}|\d{2}\s{3}|\d{3}\s{2}|\d{4}\s{1}|\d{5}|\s\d{4}|\s{2}\d{3}|\s{3}\d{2}|\s{4}\d)$/){


我的使用比较特殊,每次校验数据会很多 数据也很长,正个表达式加起来估计都有200多长度了 我问的这个东西只是里面一个小字段的校验 所以。。。。。。。。。。。。。 哎
xyzxyz1111 2005-05-26
  • 打赏
  • 举报
回复
没有规定必须是一个正则表达式,所以可以

$_ = "1111 ";

if(/^\s*\d+|\d+\s*$/){
if(/^[ \d]{5}$/){
print "OK\n";
}
}

如果要求只能用一个正规表达式

$_ = " 111";
if(/^(\d\s{4}|\d{2}\s{3}|\d{3}\s{2}|\d{4}\s{1}|\d{5}|\s\d{4}|\s{2}\d{3}|\s{3}\d{2}|\s{4}\d)$/){
print "OK\n";
}

superdc 2005-05-26
  • 打赏
  • 举报
回复
感谢 brianlu(-) 、 zgxbliss(星)

但两位的都不能满足我的要求

所列出的表达式都忘了最重要的一点 总长度是 5
/^\s*\S{1,5}\s*$/ 只限制了\S是最大5个长度

brianlu(-) 所说的(^\w{1,5}[ ]*$)|(^[ ]{0,4}\w+$)/ 也是同样的问题


再次感谢两位 请大家继续! 谢谢


另: 正则表达式支持 计算嘛? 比如 : 如果 1>0 进行 x匹配 否则进行y匹配 这个1>0需要是真正的计算哦 可能是 100/50 呵呵 好象是没有这样的功能哈? :)

再另: 我的开发环境 VC++ / Microsoft vbscript regular expressions5


我知道regular在perl中是大量使用的 此处必定藏龙卧虎 所以来求助 活活 :) 谢谢大家参与

继续继续继续。。。。。。。。。。。。。。
zgxbliss 2005-05-26
  • 打赏
  • 举报
回复
my $str = "11 1";
if($str =~ /^\s*\S{1,5}\s*$/){
print "OK\n";
}
brianlu 2005-05-26
  • 打赏
  • 举报
回复
用Perl写的,写2个正则表达式来判断
/^(\w|[ ]){5}$/
/(^\w{1,5}[ ]*$)|(^[ ]{0,4}\w+$)/

if(/^(\w|[ ]){5}$/ && /(^\w{1,5}[ ]*$)|(^[ ]{0,4}\w+$)/){
print "legal!\n";
}else{
print "illegal!\n";
}
shhgs 2005-05-25
  • 打赏
  • 举报
回复
为什么要用正则表达式? "%05d" % string.atoi(x)很简单嘛。

如果一定要用正则表达式,Python实现
def f(m) :
s = m.group(0)
if len(s) >= 5 :
return s
else :
return (5-len(s)) * '0' + s
re.sub('\d+', f, s)

至于Perl的,大致也差不多,不过就是要玩$&了。
superdc 2005-05-25
  • 打赏
  • 举报
回复
顶一下

谢谢楼上兄台 八过我要的不是这个 我要是是数据校验的正则表达式~ 活活活活~~
superdc 2005-05-25
  • 打赏
  • 举报
回复
好嘛 我就再详细的说他一说

我现在要做数据校验 我允许的数据是5位长度的 如果不够5位就补空格,可以补在左边或右边,但是不在中间 也就是说“ 11”或“11 ”都可以 但是 “1 1”就不可以 我需要这个正则表达式


各位大人看清楚了啊 活活活活 晕

fibbery 2005-05-25
  • 打赏
  • 举报
回复
呵呵,楼主,提问的时候最好能举出一个例子来,能容易让别人理解,这样可以提高解决问题的效率.
加载更多回复(1)

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧