我有一个字符串变量包含
string = "123hello456world789"
字符串不包含空格。我想写一个正则表达式,只打印包含(a-z)的单词。我试了一个简单的正则表达式
pat = "([a-z]+){1,}"
match = re.search(pat, word, re.DEBUG)
match对象只包含单词Hello
,单词World
不匹配。
当使用re.findall()
时,我可以得到Hello
和World
。
我的问题是为什么我们不能用re.search()
来做这件事?
如何使用re.search()
?
2条答案
按热度按时间ccgok5k51#
re.search()
在字符串documenation中找到模式once:扫描字符串,查找正则表达式模式产生匹配的位置,并返回相应的MatchObject示例。如果字符串中没有位置与模式匹配,则返回None;注意,这不同于在字符串中的某个点处找到零长度匹配。
为了匹配每个出现,您需要
re.findall()
,文档:以字符串列表的形式返回字符串中模式的所有非重叠匹配项。字符串从左到右扫描,匹配项按找到的顺序返回。如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组的列表。2空匹配包含在结果中,除非它们触及另一个匹配的开始。
示例:
更新日期:
由于your duplicate question(as discussed at this link),我在这里添加了我的另一个答案:
正如您所看到的,您提供的第一个示例失败的原因是因为大写,您可以简单地添加
re.IGNORECASE
标志,尽管您提到匹配应该只使用小写。hjzp0vay2#
@InbarRose的回答说明了为什么re.search是这样工作的,但是如果你想要
match
对象,而不仅仅是re.findall
的字符串输出,请使用re.finditer
或者,如果您需要
list
使用
string
作为变量名通常也是一个坏主意,因为它是一个公共模块。