从句子中的方括号获取子字符串

时间:2018-09-24 09:03:35

标签: python

我想问一个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

如果有人可以帮助我,我将不胜感激!

3 个答案:

答案 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)

该函数将返回在给定字符串参数的括号之间的项目列表。

任何建议将不胜感激。