如何从Python中的原始输入中提取某些数字?

如何从Python中的原始输入中提取某些数字?,python,regex,string,Python,Regex,String,假设我向用户询问一些随机字母和数字。假设他们给了我1254jf4h。我如何把字母jfh转换成一个单独的变量,然后把数字12544转换成一个单独的变量呢。忽略。 >>> s="1254jf4h" >>> num=[] >>> alpah=[] >>> for n,i in enumerate(s): ... if i.isdigit(): ... num.append(i) ... else: ...

假设我向用户询问一些随机字母和数字。假设他们给了我1254jf4h。我如何把字母jfh转换成一个单独的变量,然后把数字12544转换成一个单独的变量呢。忽略。

>>> s="1254jf4h"
>>> num=[]
>>> alpah=[]
>>> for n,i in enumerate(s):
...   if i.isdigit():
...      num.append(i)
...   else:
...      alpah.append(i)
...
>>> alpah
['j', 'f', 'h']
>>> num
['1', '2', '5', '4', '4']
NUMBERS = "0123456789"
LETTERS = "abcdefghijklmnopqrstuvwxyz"

def numalpha(string):
    return string.translate(None, NUMBERS), string.translate(None, LETTERS)

print numalpha("14asdf129h53")
函数numalpha返回一个包含两个字符串的2元组,第一个包含原始字符串中的所有字母字符,第二个包含数字

请注意,这是非常低效的,因为它遍历字符串两次,并且没有考虑数字和字母具有连续ASCII码的事实,尽管它确实具有易于修改的优点,以便与其他编码一起使用


还要注意,我只提取了小写字母。是的,这不是我写过的最好的代码片段xD。希望它能有所帮助。

编辑:哦,你已经得到了答案。忽略。

NUMBERS = "0123456789"
LETTERS = "abcdefghijklmnopqrstuvwxyz"

def numalpha(string):
    return string.translate(None, NUMBERS), string.translate(None, LETTERS)

print numalpha("14asdf129h53")
函数numalpha返回一个包含两个字符串的2元组,第一个包含原始字符串中的所有字母字符,第二个包含数字

请注意,这是非常低效的,因为它遍历字符串两次,并且没有考虑数字和字母具有连续ASCII码的事实,尽管它确实具有易于修改的优点,以便与其他编码一起使用


还要注意,我只提取了小写字母。是的,这不是我写过的最好的代码片段xD。希望它能有所帮助。

for循环足够简单。就个人而言,我会使用filter()


for循环非常简单。就个人而言,我会使用filter()


你为什么要列举这些数字?在s:中为i设置
,因为你从不使用n.@只是某个人。这有关系吗?你认为OP不需要它,我认为OP会需要它。这对您合适吗?这有点重要,因为它速度较慢(因为您在枚举器生成器中包装了一个简单的iterable),并且用一个未使用的变量污染了名称空间,但不会向结果添加任何内容。这完全没有必要。您可以在代码中添加
pass
如果为True:
,它仍然会产生相同的输出,但不会使代码工作得更好。在这种情况下,
也不会枚举
。慢一点?谁在乎呢?就像我说的,这取决于OP。如果他不需要它,他可以移除它。我只是想使用enumerate,因为我不知道OP的设置是什么。别告诉我你知道OP真正想要什么?那你想怎么办呢?还继续这场琐碎的辩论吗?我退出。你似乎比我想的投入更多。祝你一周愉快!你为什么要列举这些数字?在s:
中为i设置
,因为你从不使用n.@只是某个人。这有关系吗?你认为OP不需要它,我认为OP会需要它。这对您合适吗?这有点重要,因为它速度较慢(因为您在枚举器生成器中包装了一个简单的iterable),并且用一个未使用的变量污染了名称空间,但不会向结果添加任何内容。这完全没有必要。您可以在代码中添加
pass
如果为True:
,它仍然会产生相同的输出,但不会使代码工作得更好。在这种情况下,
也不会枚举
。慢一点?谁在乎呢?就像我说的,这取决于OP。如果他不需要它,他可以移除它。我只是想使用enumerate,因为我不知道OP的设置是什么。别告诉我你知道OP真正想要什么?那你想怎么办呢?还继续这场琐碎的辩论吗?我退出。你似乎比我想的投入更多。祝你一周愉快!