Board logo

标题: [文本处理] [已解决]批处理findstr命令中正则表达式\<xyz的理解 [打印本页]

作者: januapr    时间: 2009-8-21 22:42     标题: [已解决]批处理findstr命令中正则表达式\<xyz的理解

文件123.txt内容如下:
  1. abc123
  2. icq abc 456
  3. eeeeabc
  4. jjjjabctttt
  5. 123456:abc
  6. ;abc
  7. >abc
  8.   a ,abc
  9. 123 $abc
  10. %abc
复制代码
在使用findstr "\<abc" 123.txt命令时,得到以下结果:
  1. D:\>findstr "\<abc" 123.txt
  2. abc123
  3. icq abc 456
  4. 123456:abc
  5. ;abc
  6. >abc
  7.   a ,abc
  8. 123 $abc
  9. %abc
复制代码
本来是想要查找以abc为前缀的字符串的行 abc123  和  icq abc 456
结果却得出了上面的结果,很难理解\<xyz这表达式的意思!
在此请教一下findstr命令中\<xyz的理解。

[ 本帖最后由 januapr 于 2009-8-23 13:28 编辑 ]
作者: 基拉freedom    时间: 2009-8-21 23:32

因为所有行都有abc....
用\<xyz\> 应该可以
作者: januapr    时间: 2009-8-21 23:43     标题: 回复 2楼 的帖子

用\<abc\>这表达式还是不能解决!
作者: Seter    时间: 2009-8-22 12:54

错了
/<是字的开始
用^abc即可
findstr "^abc" x.y
作者: zqz0012005    时间: 2009-8-22 13:21

不要照抄帮助。
新手正是因为看不懂帮助中那个鸟“字”才有疑问。
\<xyz    字位置: 字的开始
xyz\>    字位置: 字的结束
英文帮助如下:
\<xyz    Word position: beginning of word
xyz\>    Word position: end of word
word应该翻译成“单词”才合适。(xyz指代某个代词)

同时建立楼主百度一下正则表达式,以便于理解。

PS:
个人认为,findstr将正则表达式中匹配单词边界的\b,强行分成左边界\<和右边界\>,实在没什么意义。
因为\b所放的位置就能确定左右边界。
\bhello,\b在左边,当然是左边界(单词开始);hello\b,\b在右边,当然是右边界(单词结束)。\bhello\b,就是匹配单词hello。在findstr中硬要写成\<hello\>,烦不烦啊。。
作者: januapr    时间: 2009-8-22 16:15     标题: 回复 5楼 的帖子

还是没理解!
对于顶楼123.txt的文件,如何查找出以abc为前缀的第一行abc123  和第二行icq abc 456 ?
呵呵,不要说本人罗嗦。
只是想真心求教于各位朋友!还望大家指点一下!
在此先说声谢谢了!
作者: tireless    时间: 2009-8-22 16:50

  1. findstr "\<abc." 123.txt
复制代码

作者: zqz0012005    时间: 2009-8-22 18:22     标题: 回复 6楼 的帖子

不知道你的理解能力。。。

“对于顶楼123.txt的文件,如何查找出以abc为前缀的第一行abc123  和第二行icq abc 456 ?”
你这个说法有点矛盾吧?
abc123满足条件,但“icq abc 456”如何理解?
作者: zqz0012005    时间: 2009-8-22 19:35

不好意思,5楼有个字打错了:代词-->单词

你可是这个意思?
  1. findstr /r "[ ]*abc" 123.txt
复制代码

作者: januapr    时间: 2009-8-22 19:38     标题: 回复 8楼 的帖子

对于第二行:icq abc 456
abc前后有空格隔开,所以独立成一个单词,
这个单词本身就是abc,
所以个人理解为这个单词的前缀就是它本身abc
同理,个人理解这个单词的后缀也它本身abc
呵呵,不知是不是我的解理错了呢?
作者: januapr    时间: 2009-8-22 21:18     标题: 回复 7楼 的帖子

先谢谢7楼的朋友帮助解决了上面提到的问题:想要查找以abc为前缀的字符串的行 abc123  和  icq abc 456
但是本人还是不怎么理解findstr命令中\<xyz表达式的意思!

如果按英文帮助:
\<xyz    Word position: beginning of word
xyz\>    Word position: end of word
word应该翻译成“单词”才合适。(xyz指代某个单词)


那么\<abc 应该理解为查找一个以abc为前缀的“单词”,这里我有没有理解错呢?
如果这一点没有错的话,那么在使用findstr "\<abc" 123.txt时,下面这几行怎么都给找出来了?
;abc
>abc
a ,abc
%abc
这几行的前缀并不是abc呀,而是一些符号为前缀呀?怎么理解?
难道系统默认的是把符号为前缀的先略去,然后再根据符号后面的“单词”判断?
作者: zqz0012005    时间: 2009-8-23 11:07

判断一个单词是以标点符号为界的,并不只是以空格。
这应该很好理解,跟人脑的判断类似。
作者: januapr    时间: 2009-8-23 13:24     标题: 回复 12楼 的帖子

如果是以标点符号为界的,这个就能解释上面的例子了,
谢谢版主了!!
作者: canyuexiaolang    时间: 2009-8-25 11:04

问一下findstr命令是干嘛的
作者: januapr    时间: 2009-8-25 12:28     标题: 回复 14楼 的帖子

findstr命令主要是用于查找文本内容信息的,
建议多点动手在本论坛或者百度搜索一下!
呵呵!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2