如何在每个拆分字符串中找到仅检查第一个索引?

时间:2017-03-10 18:27:18

标签: python string indexing split

我正在尝试创建一个定义一个函数:

  1. 在每个新行拆分一个名为text的字符串(ex text =“1 \ n2 \ n \ 3)
  2. 仅检查每个拆分项目中的第一个索引,以查看数字是否为0-9。
  3. 返回任何包含0-9的索引,它可以是多行
  4. ex:count_digit_leading_lines ("AAA\n1st") → 1 # 2nd line starts w/ digit 1

    到目前为止,我的代码看起来像这样,但我无法弄清楚如何只检查每个拆分字符串中的第一个索引:

    def count_digit_leading_lines(text):
       for line in range(len(text.split('\n'))):
          for index, line in enumerate(line):
            if 0<=num<=9:
                return index
    

    它接受争论文本,它遍历每一行(新的分裂字符串),我认为它只是检查第一个索引,但这是我迷路的地方......

3 个答案:

答案 0 :(得分:0)

这应该这样做:

texts = ["1\n2\n\3", 'ABC\n123\n456\n555']


def _get_index_if_matching(text):
    split_text = text.split('\n')
    if split_text:
        for line_index, line in enumerate(split_text):
            try:
                num = int(line[0])
                if 0 < num < 9:
                    return line_index
            except ValueError:
                pass


for text in texts:
    print(_get_index_if_matching(text))

它将返回0,然后返回1

答案 1 :(得分:0)

代码应该简单:

text=text.strip()              #strip all whitespace  : for cases ending with '\n' or having two '\n' together
text=text.replace('\t','')     #for cases with '\t' etc

s=text.split('\n')             #Split each sentence (@ '\n')

#s=[words.strip() for words in s]      #can also use this instead of replace('\t')

for i,sentence in enumerate(s):
    char=sentence[0]        #get first char in each sentence
    if char.isdigit():      #if 1st char is a digit (0-9)
        return i

<强>更新 刚刚注意到OP对另一个答案的评论,说明你不想在你的代码中使用enumerate(虽然它是使用枚举的好习惯)。因此for循环修改后的版本 没有枚举 是:

for i in range(len(s)):
char=s[i][0]        #get first char in each sentence
if char.isdigit():      #if 1st char is a digit (0-9)
    return i   

答案 2 :(得分:-1)

您可以为yield更改def count_digit_leading_lines(text): for index, line in enumerate(text.split('\n')): try: int(line[0]) yield index except ValueError: pass # Usage: for index in count_digit_leading_lines(text): print(index) # Or to get a list print(list(count_digit_leading_lines(text))) 语句,使您的函数成为生成器。然后你可以在一个循环中逐个获取索引,或者将它们变成一个列表。这是你可以做到的一种方式:

In : list(count_digit_leading_lines('he\n1\nhto2\n9\ngaga'))
Out: [1, 3]

示例:

$names = $collection->pluck('name');