我在学习regex。如果我想在一个字符串中找到所有5个字母的单词,我可以使用:
import re
text = 'The quick brown fox jumps over the lazy dog.'
print(re.findall(r"\b[a-zA-z]{5}\b", text))
但是我想写一个简单的函数,它的参数包括字符串和找到的单词的长度。我试过这个:
import re
def findwords(text, n):
return re.findall(r"\b[a-zA-z]{n}\b", text)
print(findwords('The quick brown fox jumps over the lazy dog.', 5))
但这会返回一个空列表。无法识别n
。你知道吗
如何用重复次数(或者在本例中是单词的长度)指定参数?你知道吗
这比你想象的要简单。“regex字符串”没有什么特别之处:它是一个简单的、基本的、日常的文本字符串。唯一值得注意的是,它通常是用
r
前缀定义的,因为反斜杠在(不固定的)Python字符串中也意味着一些东西,您不想将它们加倍,而且。。。它按原样输入Python的内部regex模块。你知道吗所以这根线从哪里来并不重要!任意构造,然后将结果输入
re.findall
:请注意
r
的重复使用,因为它不是regex特性,而是Python特性,您需要在all前面加上前缀来分隔字符串,以防止反斜杠猖獗地运行并弄乱精心构造的表达式。你知道吗(此函数的输入也是如此。这也会起作用,除非您测试参数并拒绝非数字:
。。。但我没有。)
Python不会神奇地将
n
的值填充到字符串中。为此,您需要使用format
:或者,如果您正在运行Python>;=3.6,请使用新的f-strings(可以与表示原始字符串的
r
前缀组合使用):在这两种情况下,您都需要外部的两个
{{}}
来创建一个文本{}
,而内部是一个格式占位符。你知道吗如果希望避免转义文字
{}
,可以使用较旧的%
格式来实现相同的效果。因此n
必须始终是整数(此处为整数):这可以很容易地完成,而无需生成regex模式。只需提取所有单词,然后使用列表理解来收集所有长度为
n
的单词。你知道吗See code in use here
结果:
['The', 'fox', 'the', 'dog']
相关问题 更多 >
编程相关推荐