设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 15904|回复: 6
打印 上一主题 下一主题

使用正则表达式匹配单词

[复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

楼主
发表于 2016-10-30 17:18:15 |显示全部楼层
你这个规则就是匹配两个以上字母的单词,中间有数字是没法匹配的。符号也不会匹配进来
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2016-11-1 17:12:23 |显示全部楼层
Tony 发表于 2016-10-31 20:16
我使用的是\b \b将字母包含在了其中啊,表示开头是字母,接着是一连串字母结尾 ...
\b是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,metacharacter),代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。


你现在结果是 img re ,这个有问题吗?你没说清,你说的不能匹配是什么意思。
the和y因为旁边跟的是数字,是不符合的
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

板凳
发表于 2016-11-2 15:39:55 |显示全部楼层
Tony 发表于 2016-11-1 22:18
我想我明白先生的意思了,那么,请问,我应该怎样写,才能让其正确呢? ...

你要匹配出哪个?你好像还是没有说
你给个例子,什么样的文本,要从中匹配出哪些。你用了什么规则,结果匹配出什么
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

地板
发表于 2016-11-2 22:49:28 |显示全部楼层
Tony 发表于 2016-11-2 19:00
是一个 类似于这样的:
Ho454w m545any roads must a man walk downBef434ore they call him a man
H767o ...

符号分割是符合 \b 的定义的,就是单词的边界。
你想要的其实是两边是空格或开头结尾的纯单词,即使是标点分割也不算,是这样吧。

那我觉得比较复杂。我能想到的办法就是用零宽断言:
(?<=\s)[A-z]+(?=\s|$)
然后还要考虑上第一个单词的情况
^[A-z]+
所以并一起就是
(?<=\s)[A-z]+(?=\s|$)|^[A-z]+
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

5#
发表于 2016-11-4 14:18:30 |显示全部楼层
Tony 发表于 2016-11-3 19:18
对,我就想要的是这个。
可是,按照你写的正则表达式,结果还是不行啊。。。 ...
  1. import re
  2. r='(?<=\s)[A-z]+(?=\s|$)|^[A-z]+'
  3. s='''
  4. Ho454w m545any roads must a man walk downBef434ore they call him a man
  5. H767ow m767any s767eas m676ust a wh453ite do4543ve sai45l
  6. Be56fore s565he sle3434eps i343n th434e san453d
  7. Ho343w man565y tim5767es m767ust t78he cann564on ba45lls f656ly
  8. Be686fore the7876y're f787orever ba7878nned
  9. T7567he an75675swer m76y fr656iend is blowing in the wind
  10. The answer is blow .ing in the wi1n3d th345'are
  11. '''
  12. re.findall(r,s)
复制代码
输出
['roads', 'must', 'a', 'man', 'walk', 'they', 'call', 'him', 'a', 'man', 'a', 'is', 'blowing', 'in', 'the', 'wind', 'The', 'answer', 'is', 'blow', 'in', 'the']
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

6#
发表于 2016-11-5 22:05:27 |显示全部楼层
Tony 发表于 2016-11-5 09:25
我是这样写的:结果:demo.txt 的内容是这些:

Ho454w m545any roads must a man walk downBef434ore the ...

r='(?<=\s)[A-z]+(?=\s|$)|^[A-z]+(?=\s|$)'
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

7#
发表于 2016-11-6 22:02:37 |显示全部楼层
Tony 发表于 2016-11-6 08:54
现在可以了,谢谢crossin先生!
看来我还要努力学习正则表达式啊,你说的这个零宽断言,我以前根本没有听 ...

你这个需求确实不太好写。

推荐看看这个 http://deerchao.net/tutorials/regex/regex-1.htm
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-13 21:26 , Processed in 0.026891 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部