1

你好社区,

[序言]:
我来自 BASH 脚本背景(仍在学习那里),并决定冒险进入另一种语言可能会有益于我的学习过程。对我来说,自然的选择似乎是 Python。我开始学习了一下,并且一直在学习 www.learnpython.org 上的练习。特别是模块和包

[ 问题 ] :

Import模块reprintout 按字母顺序排序,模块中包含单词的所有函数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()功能的一部分完成的?以正确格式获得所需输出的好方法是什么?

4

1 回答 1

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])
于 2013-09-13T09:11:13.143 回答