我想问一个python初学者,我想从一个方括号内获取字符串,最好是不尝试从python导入任何模块。如果没有的话。
例如,
def find_tags
#do some codes
x = find_tags('Hi[Pear]')
print(x)
它将返回
1-Pear
例如,如果有多个括号,
x = find_tags('[apple]and[orange]and[apple]again!')
print(x)
它将返回
1-apple,2-orange,3-apple
如果有人可以帮助我,我将不胜感激!
答案 0 :(得分:0)
您可以使用简单的for循环遍历文本的所有字符来解决此问题。
您必须记住,您是在标签里面还是在标签外面,还是在标签外面?如果您在内部将字母添加到临时列表中,或者遇到了标签,您将整个临时列表作为单词添加到返回列表中。
您可以使用单词列表中的enumerate(iterable, start=1)
来解决编号问题:
def find_tags(text):
inside_tag = False
tags = [] # list of all tag-words
t = [] # list to collect all letters of a single tag
for c in text:
if not inside_tag:
inside_tag = c == "[" # we are inside as soon as we encounter [
elif c != "]":
t.append(c) # happens only if inside a tag and not tag ending
else:
tags.append(''.join(t)) # construct tag from t and set inside back to false
inside_tag = False
t = [] # clear temporary list
if t:
tags.append(''.join(t)) # in case we have leftover tag characters ( "[tag" )
return list(enumerate(tags,start=1)) # create enumerated list
x = find_tags('[apple]and[orange]and[apple]again!')
# x is a list of tuples (number, tag):
for nr, tag in x:
print("{}-{}".format(nr, tag), end = ", ")
然后,在每个打印命令之后指定','作为分隔符以获取输出。
x
看起来像:[(1, 'apple'), (2, 'orange'), (3, 'apple')]
答案 1 :(得分:0)
如果您的模式与[sometext]sometext[sometext]...
一样,则可以实现以下功能:
import re
def find_tags(expression):
r = re.findall('(\[[a-zA-Z]+\])', expression)
return ",".join([str(index + 1) + "-" + item.replace("[", "").replace("]", "") for index, item in enumerate(r)])
您可以使用堆栈数据结构(FIFO)解决此问题。
答案 2 :(得分:0)
在这里,我尝试解决它。这是我的代码:
bracket_string = '[apple]and[orange]and[apple]again!'
def find_tags(string1):
start = False
data = ''
data_list = []
for i in string1:
if i == '[':
start = True
if i != ']' and start == True:
if i != '[':
data += i
else:
if data != '':
data_list.append(data)
data = ''
start = False
return(data_list)
x = find_tags(bracket_string)
print(x)
该函数将返回在给定字符串参数的括号之间的项目列表。
任何建议将不胜感激。