使用Python中的函数返回子字符串

使用Python中的函数返回子字符串,python,python-3.x,substring,Python,Python 3.x,Substring,我觉得我的问题很基本,因为我是计算机科学第一学期的学生 我被要求返回字符串中一个数字前面形成的子字符串,类似于“abcd5efgh”。这个想法是使用一个函数来给我“abcd”。我想我需要使用.isdigit,但我不确定如何将其转换为函数。提前谢谢你 可以使用regexp完成,但是如果您已经发现了isdigit,为什么不在这种情况下使用它呢 如果找不到数字,您可以修改最后一个返回s行以返回其他内容: def string_before_digit(s): for i, c in enume

我觉得我的问题很基本,因为我是计算机科学第一学期的学生


我被要求返回字符串中一个数字前面形成的子字符串,类似于
“abcd5efgh”
。这个想法是使用一个函数来给我
“abcd”
。我想我需要使用
.isdigit
,但我不确定如何将其转换为函数。提前谢谢你

可以使用regexp完成,但是如果您已经发现了
isdigit
,为什么不在这种情况下使用它呢

如果找不到数字,您可以修改最后一个
返回s
行以返回其他内容:

def string_before_digit(s):
    for i, c in enumerate(s):
        if c.isdigit():
            return s[:i]
    return s # no digit found

print(string_before_digit("abcd5efgh"))

可以使用regexp完成,但是如果您已经发现了
isdigit
,为什么不在这种情况下使用它呢

如果找不到数字,您可以修改最后一个
返回s
行以返回其他内容:

def string_before_digit(s):
    for i, c in enumerate(s):
        if c.isdigit():
            return s[:i]
    return s # no digit found

print(string_before_digit("abcd5efgh"))

下面的代码将使用正则表达式为您提供第一个非数字部分

import re
myPattern=re.compile('[a-zA-Z]*')
firstNonDigitPart=myPattern.match('abcd5efgh')
firstNonDigitPart.group()
>>> 'abcd'

下面的代码将使用正则表达式为您提供第一个非数字部分

import re
myPattern=re.compile('[a-zA-Z]*')
firstNonDigitPart=myPattern.match('abcd5efgh')
firstNonDigitPart.group()
>>> 'abcd'

如果不允许您使用正则表达式,可能是因为他们告诉您手动显式执行,您可以这样做:

def digit_index(s):
    """Helper function."""
    # next(..., -1) asks the given iterator for the next value and returns -1 if there is none.
    # This iterator gives the index n of the first "true-giving" element of the asked generator expression. True-giving is any character which is a digit.
    return next(
        (n for n, i in enumerate(i.isdigit() for i in "abc123") if i),
        -1)

def before_digit(s):
    di = digit_index(s)
    if di == -1: return s
    return s[:di]

应该给你想要的结果。

如果你不被允许使用正则表达式,可能是因为他们告诉你用手显式地执行,你可以这样做:

def digit_index(s):
    """Helper function."""
    # next(..., -1) asks the given iterator for the next value and returns -1 if there is none.
    # This iterator gives the index n of the first "true-giving" element of the asked generator expression. True-giving is any character which is a digit.
    return next(
        (n for n, i in enumerate(i.isdigit() for i in "abc123") if i),
        -1)

def before_digit(s):
    di = digit_index(s)
    if di == -1: return s
    return s[:di]

应该会给你你想要的结果。

我目前也是一名学生,我会这样解决这个问题: *对于我的学校,我们不允许使用python中的内置函数:/

     def parse(string):
       newstring = ""
       for i in string:
          if i >= "0" and i <= "9":
             break
          else:
             newstring += i
       print newstring #Can use return if your needing it in another function

     parse("abcd5efgh")
def解析(字符串):
newstring=“”
对于字符串中的i:

如果我>=“0”并且我我目前也是一名学生,这就是我解决这个问题的方法: *对于我的学校,我们不允许使用python中的内置函数:/

     def parse(string):
       newstring = ""
       for i in string:
          if i >= "0" and i <= "9":
             break
          else:
             newstring += i
       print newstring #Can use return if your needing it in another function

     parse("abcd5efgh")
def解析(字符串):
newstring=“”
对于字符串中的i:
如果i>=“0”且i为功能性方法:)

功能性方法:)


非常简单的一行程序,使用:)


非常简单的一行程序,使用:)

itertools方法:

>>> from itertools import takewhile
>>> s="abcd5efgh"
>>> ''.join(takewhile(lambda x: not x.isdigit(), s))
'abcd'
itertools方法:

>>> from itertools import takewhile
>>> s="abcd5efgh"
>>> ''.join(takewhile(lambda x: not x.isdigit(), s))
'abcd'

您可以返回
len(s)
@jamylak Right,而不是
-1
,但是-1使该函数与其他搜索函数更兼容,并可在其他上下文中使用。以可重用的方式编程也是学习编程的一个重要方面……假设它是一个列表/字符串,您已经在对它进行切片,因此它现在不是非常可重用,而不是
-1
,您可以返回
len(s)
@jamylak right,但是-1使该函数与其他搜索函数更兼容,并可在其他上下文中使用。以可重用的方式编程也是学习编程的一个重要方面……假设它是一个列表/字符串,您已经在对它进行切片了,所以它现在不是很可重用。我刚刚尝试了这个方法,在突出显示数字之前,我发现了字符串\u的语法错误。我遗漏了什么吗?@posthumana如果您使用的是Python 3,请使用
print(…)
而不是
print…
太棒了!我早该知道的。非常感谢。我刚刚尝试了这个,但在突出显示\u数字之前出现了字符串\u的语法错误。我遗漏了什么吗?@posthumana如果您使用的是Python 3,请使用
print(…)
而不是
print…
太棒了!我早该知道的。非常感谢。如果‘0’认为“0”更习惯性的<代码>,请考虑更惯用的<代码>。