[序言]:
我来自BASH脚本背景(还在那里学习)并决定通过冒险学习另一种语言可能有益于我的学习过程。我的自然选择似乎是Python。我开始学习一点,并一直在www.learnpython.org上进行练习。特别是Modules and Packages。
[问题]:
Import
模块重新和print
按字母顺序排序,模块中包含单词find
的所有函数。
[尝试]:
# import the module.
import re
# store output of dir(re) in reLST as string list.
''' I believe that's what happens, correct? '''
reLST = dir(re)
# iterate over reLST and assign m strings matching word containing find.
for element in reLST:
m = re.match("(find\w+)", element)
# Here it prints out the matches, but only using the function .groups()
''' Won't work using print sorted(m) ---why? '''
# Found tutorial online, but no real understanding of .groups() function use.
if m:
print sorted(m.groups())
[预期输出]:
['findall','finditer']
[我的输出]:
[ '的findall']
[ 'finditer']
[问题]:
从技术上讲,代码可以工作并输出从dir(re)
抓取的所有字符串,但是在新行上。我猜这是作为.groups()
函数的一部分完成的?以正确的格式获得所需输出的好方法是什么?
答案 0 :(得分:1)
您应该在列表中收集结果,然后对它们进行排序:
import re
results = []
for element in dir(re):
m = re.match("(find\w+)", element)
if m:
results.append(m.group(1))
print sorted(results)
此外,您可以使用re
:
startswith()
import re
results = []
for element in dir(re):
if element.startswith('find'):
results.append(element)
print sorted(results)
或使用list comprehension
在一行中使用相同的内容:
import re
print sorted([element for element in dir(re) if element.startswith('find')])
如果单词find
可以在字符串中的任何位置,则应使用in
代替startswith()
:
import re
print sorted([element for element in dir(re) if 'find' in element])