蟒re.search()和re.findall()[重复](Python re.search() a

2019-10-19 01:44发布

这个问题已经在这里有一个答案:

  • Python的re.search 2个回答

我试图从解决问题这个Hackerrank 。 这是一个机器学习问题。 起初,我试图读取所有从语料库文件中的单词构建的单字组频率。 根据这一ML问题word被定义为

字是含有仅字母字符序列az (小写只),并且可以包含连字符( -和撇号( ' )。 Word应开始,只用小写字母结束。

我喜欢这条巨蟒写了一个正则表达式:

pat = "[a-z]+( ['-]+[a-z]+ ){0,}"

我试图同时使用re.search()re.findall() 我有两个问题。

  • 问题re.findall()

     string = "HELLO WORLD" 

    的输出re.findall()

     [('Hello', ''), ('W', '-D')] 

    我不能让这个词WORLD 。 虽然使用re.search()我是能够正确地得到它

  • 问题re.search()

     string = "123hello456world789" 

    的输出re.search()

     'hello' 

    在这种情况下,当使用re.findall()我能得到这两个'hello''world'

Answer 1:

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

>>> 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标志,但你提到的比赛只应小写。



文章来源: Python re.search() and re.findall() [duplicate]