首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python re.search()和re.findall()

Python re.search()和re.findall()
EN

Stack Overflow用户
提问于 2013-11-27 13:49:18
回答 1查看 755关注 0票数 1

我正试图从黑客等级的问题中解决这个问题。这是一个机器学习问题。一开始,我试着阅读语料库文件中的所有单词,以建立字母频率。根据这个ML问题,word被定义为

Word是一个字符序列,只包含从az的字母(仅小写),可以包含连字符(-)和撇号(')。单词应该以小写字母开头和结尾。

我用python编写了一个正则表达式,如下所示:

代码语言:javascript
复制
pat = "[a-z]+( ['-]+[a-z]+ ){0,}"

我试着同时使用re.search()re.findall()。这两方面我都有问题。

  • re.findall()的问题: string = "HELLO W-O L-D“ re.findall()('Hello',''),('W','-D')的输出 我听不懂W-O-R-L-D这个词。在使用re.search()时,我能够正确地获得它
  • re.search()的问题: string =“123 hello456world789” re.search()的输出: “你好” 在本例中,当使用re.findall()时,我可以同时获得'hello''world'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-27 13:54:03

作为我张贴了你之前的问题,您应该使用re.findall() -但是无论如何,您的问题是正则表达式是错误的。见下面的示例:

代码语言:javascript
复制
>>> import re
>>> regex = re.compile(r'([a-z][a-z-\']+[a-z])')
>>> regex.findall("HELLO W-O-R-L-D") # this has uppercase
[]  # there are no results here, because the string is uppercase
>>> regex.findall("HELLO W-O-R-L-D".lower()) # lets lowercase
['hello', 'w-o-r-l-d'] # now we have results
>>> regex.findall("123hello456world789")
['hello', 'world']

正如您所看到的,您在提供的第一个示例中失败的原因是由于大写,您可以简单地添加re.IGNORECASE标志,尽管您提到匹配应该是小写的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20244228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档