当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 10 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [讨论]匹配整数的正则表达式,再次请教!!
帖子发表于 : 2007-05-22 20:31 

注册: 2006-03-24 9:59
帖子: 47
送出感谢: 0 次
接收感谢: 0 次
^[1-9][0-9]*$

这个表达式可以匹配放在单行里的正整数(无符号),也无空格制表符等,如果要匹配在行中间的无符号整数(如果以空格分制表符分隔)

[\t ]+[1-9][0-9]*[\t ]+

但是要匹配行首(前无空格制表符)或则行末(后无字符)的整数时,这个表达是式不能用了。如果要匹配任意的整数,包括在行首尾和在中间的情况,正则表达式应该怎么写?

希望高手给点建议


最后由 ichthyornis 编辑于 2007-05-22 22:31,总共编辑了 1 次

页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-05-22 20:33 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
\b[1-9][0-9]*\b


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-05-22 21:08 

注册: 2006-03-24 9:59
帖子: 47
送出感谢: 0 次
接收感谢: 0 次
测试成功,非常感谢


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-05-22 22:23 

注册: 2006-03-24 9:59
帖子: 47
送出感谢: 0 次
接收感谢: 0 次
:em23 还是有问题!
代码:
#CHGCAR文件
CaCO3-aragonite                         
    1.000000000000000     
     4.961400    0.000000    0.000000
     0.000000    7.967100    0.000000
     0.000000    0.000000    5.740400
12
Direct
  0.250000  0.085105  0.259481
  0.250000  0.414895  0.759481
  0.750000  0.585105  0.240519
  0.750000  0.914895  0.740519
  0.250000  0.738619  0.415570
  0.250000  0.761381  0.915570
  0.750000  0.238619  0.084430
  0.750000  0.261381  0.584430
  0.024132  0.678919  0.912519
  0.024132  0.821081  0.412519
  0.975868  0.178919  0.587481
  0.975868  0.321081  0.087481

   64  108   80
 0.26580719412E+02 0.17179387286E+02 0.18993911278E+02 0.22074623538E+02 0.26491702725E+02
 0.32330871821E+02 0.39694522346E+02 0.48695884661E+02 0.59428145137E+02 0.71892352244E+02
 0.85886926744E+02 0.10089039604E+03 0.11599475036E+03 0.12994660847E+03 0.14131862254E+03
 0.14877818477E+03 0.15137842723E+03 0.14877818477E+03 0.14131862254E+03 0.12994660847E+03
 0.11599475036E+03 0.10089039604E+03 0.85886926744E+02 0.71892352244E+02 0.59428145137E+02
 0.48695884661E+02 0.39694522346E+02 0.32330871821E+02 0.26491702725E+02 0.22074623538E+02
... ...


代码:
[zhoub@nsi diff]$ head -200 CHGCAR | sed -n '/\b[1-9][0-9]*\b/'p
    1.000000000000000     
     4.961400    0.000000    0.000000
     0.000000    7.967100    0.000000
     0.000000    0.000000    5.740400
12
  0.250000  0.085105  0.259481
  0.250000  0.414895  0.759481
  0.750000  0.585105  0.240519
  0.750000  0.914895  0.740519
  0.250000  0.738619  0.415570
  0.250000  0.761381  0.915570
  0.750000  0.238619  0.084430
  0.750000  0.261381  0.584430
  0.024132  0.678919  0.912519
  0.024132  0.821081  0.412519
  0.975868  0.178919  0.587481
  0.975868  0.321081  0.087481
   64  108   80



代码:
[zhoub@nsi diff]$ head -200 CHGCAR | sed -n '/\b[1-9][0-9]\b/'p
12
   64  108   80

我的目的就是找出这两行,但是上面的 /\b[1-9][0-9]*\b/ 为什么会错而 /\b[1-9][0-9]\b/ 却得到正确的结果?
后面的式子只能匹配2位数的行,我把64和80改成164和180后,后一个表达式就找不到这行了?

那位给解释一下吧 :em23 :em23 :em23


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2007-05-22 22:28 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
发现是因为小数点不认为是非\w


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


最后由 BigSnake.NET 编辑于 2007-05-22 22:33,总共编辑了 1 次

页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2007-05-22 22:32 

注册: 2006-03-24 9:59
帖子: 47
送出感谢: 0 次
接收感谢: 0 次
代码:
[zhoub@nsi diff]$ head -200 CHGCAR | sed -n '/\s[1-9][0-9]*\s/'p
   64  108   80

匹配不了12的那一行

谢谢你了


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2007-05-22 22:50 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
sed -n '/\(^\|\s\)[1-9][0-9]*\($\|\s\)/p'

如果你认为整数两边必须是空白的话


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


最后由 BigSnake.NET 编辑于 2007-05-22 22:53,总共编辑了 1 次

页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2007-05-22 22:51 

注册: 2006-03-24 9:59
帖子: 47
送出感谢: 0 次
接收感谢: 0 次
小数点也是\b匹配的字符,看来还要另外想办法了

代码:
[zhoub@nsi diff]$ echo "wode.xex" |sed -n '/de\b/'p
wode.xex


不知道 /(^| ) *[1-9][0-9]* */ 为什么不行


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2007-05-22 22:59 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
grep -E '(^|\s)[1-9][0-9]*($|\s)'
sed -n -r '/(^|\s)[1-9][0-9]*($|\s)/p'


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2007-05-22 23:02 

注册: 2006-03-24 9:59
帖子: 47
送出感谢: 0 次
接收感谢: 0 次
BigSnake.NET 写道:
sed -n '/\(^\|\s\)[1-9][0-9]*\($\|\s\)/p'

如果你认为整数两边必须是空白的话


这个好像行了,非常感谢你,我学到了不少


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 10 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译