Python 从字符串中删除非数字字符

Python 从字符串中删除非数字字符,python,Python,获取[1,25,2234342]最简单的方法是什么 如果没有正则表达式模块或表达式,如^[0-9]+?正则表达式的基本用法,如何做到这一点: 进口稀土 字符串=[1asdf,25etrth,2234342 awefiasd] regex=re.compile'^\d*' 对于字符串中的s: new = [] for item in strings: new.append(int(''.join(i for i in item if i.isdigit()))) print new [

获取[1,25,2234342]最简单的方法是什么


如果没有正则表达式模块或表达式,如^[0-9]+?

正则表达式的基本用法,如何做到这一点:

进口稀土

字符串=[1asdf,25etrth,2234342 awefiasd]

regex=re.compile'^\d*'

对于字符串中的s:

new = []
for item in strings:
    new.append(int(''.join(i for i in item if i.isdigit())))


print new
[1, 25, 2234342]
1asdf->1

第25节->第25节


2234342 awefiasd->2234342

正则表达式的基本用法:

进口稀土

字符串=[1asdf,25etrth,2234342 awefiasd]

regex=re.compile'^\d*'

对于字符串中的s:

new = []
for item in strings:
    new.append(int(''.join(i for i in item if i.isdigit())))


print new
[1, 25, 2234342]
1asdf->1

第25节->第25节


2234342 awefiasd->2234342

那么您只需要前导数字?你想避免正则表达式吗?也许有更简短的,但这是显而易见的解决方案

  mo = regex.match(s)

  print s, '->',  mo.group(0)

所以你只想要前导数字?你想避免正则表达式吗?也许有更简短的,但这是显而易见的解决方案

  mo = regex.match(s)

  print s, '->',  mo.group(0)

可以编写一个helper函数来提取前缀:

nlist = []
for s in strings:
    if not s or s[0].isalpha(): continue
    for i, c in enumerate(s):
        if not c.isdigit():
            nlist.append(int(s[:i]))
            break
    else:
        nlist.append(int(s))
用法示例:

def numeric_prefix(s):
    n = 0
    for c in s:
        if not c.isdigit():
            return n
        else:
            n = n * 10 + int(c)
    return n
请注意,当输入字符串没有数字前缀(如空字符串)时,这将生成正确的输出零

根据Mikel的解决方案,我们可以编写一个更简洁的数字前缀定义:

>>> strings = ["1asdf", "25etrth", "2234342 awefiasd"]
>>> [numeric_prefix(s) for s in strings]
[1, 25, 2234342]

可以编写一个helper函数来提取前缀:

nlist = []
for s in strings:
    if not s or s[0].isalpha(): continue
    for i, c in enumerate(s):
        if not c.isdigit():
            nlist.append(int(s[:i]))
            break
    else:
        nlist.append(int(s))
用法示例:

def numeric_prefix(s):
    n = 0
    for c in s:
        if not c.isdigit():
            return n
        else:
            n = n * 10 + int(c)
    return n
请注意,当输入字符串没有数字前缀(如空字符串)时,这将生成正确的输出零

根据Mikel的解决方案,我们可以编写一个更简洁的数字前缀定义:

>>> strings = ["1asdf", "25etrth", "2234342 awefiasd"]
>>> [numeric_prefix(s) for s in strings]
[1, 25, 2234342]

基于sahhhm的答案,您可以通过使用takewhile修复1 asdf 1问题


基于sahhhm的答案,您可以通过使用takewhile修复1 asdf 1问题



但它会检查字符串中的每个字母。1 asdf 1将变为11而不是1如果字符串是1 asdf 2,结果是1还是2?@CSZ:如果字符串是1 asdf 1,那么结果应该是什么,或者您希望是什么?1号还是11号?这些是您的字符串…请参阅,了解解决1 asdf 2问题的一种方法。如果您要给出列表理解解决方案,不妨全力以赴:[intx for x in[.join[c for c in s If c.isdigit]for s in strings]],但它将检查字符串中的每个字母。1 asdf 1将变为11而不是1如果字符串是1 asdf 2,结果是1还是2?@CSZ:如果字符串是1 asdf 1,那么结果应该是什么,或者您希望是什么?1号还是11号?这些是您的字符串…请参阅,了解解决1 asdf 2问题的一种方法。如果要提供列表理解解决方案,不妨全力以赴:[intx for x in[.join[c for c in s If c.isdigit]for s in strings]-1。第三行问题是,如果没有regex模块或像^[0-9]+这样的表达式,如何做到这一点?很明显,CSZ要求的答案是不使用re。完全没有价值的线程,因为这里没有理由不使用正则表达式。同意。但是/那/应该是你的答案。第三行问题是,如果没有regex模块或像^[0-9]+这样的表达式,如何做到这一点?很明显,CSZ要求的答案是不使用re。完全没有价值的线程,因为这里没有理由不使用正则表达式。同意。但是/那/应该是你的答案。如果输入中有一个字符串asdf呢?它应该是0,还是不出现在结果列表中?@Mikel,很好;后者对我来说更有意义,所以我添加了一行来产生这个结果。为什么你想要一个不使用正则表达式的解决方案?用例?@Mikel,开头总是至少有一个数字。@Andreas Jung,对于这样简单的任务来说,正则表达式似乎太多了。想要找到没有正则表达式的优雅解决方案。如果输入中有字符串asdf怎么办?它应该是0,还是不出现在结果列表中?@Mikel,很好;后者对我来说更有意义,所以我添加了一行来产生这个结果。为什么你想要一个不使用正则表达式的解决方案?用例?@Mikel,开头总是至少有一个数字。@Andreas Jung,对于这样简单的任务来说,正则表达式似乎太多了。想要找到没有正则表达式的优雅解决方案。请注意,Adeel Soomro的答案可能更简单,前提是结果列表中不包含数字的字符串可以显示为“无”。请注意,Adeel Soomro的答案可能更简单,前提是结果列表中不包含数字的字符串可以显示为“无”。谢谢,takewhile是我需要的谢谢,takewhile是我需要的