【发布时间】:2017-05-17 05:48:06
【问题描述】:
我是 python 新手,正在尝试解决数字和字符串之间的区别 例如:
- 输入:111aa111aa
- 输出:数字:111111,字符串:aaaa
【问题讨论】:
-
你可以为此编写一个正则表达式
我是 python 新手,正在尝试解决数字和字符串之间的区别 例如:
【问题讨论】:
这是你的答案 对于数字
import re
x = '111aa111aa'
num = ''.join(re.findall(r'[\d]+',x))
字母表
import re
x = '111aa111aa'
alphabets = ''.join(re.findall(r'[a-zA-Z]', x))
【讨论】:
您可以将in-built 函数用作isdigit() 和isalpha()
>>> x = '111aa111aa'
>>> number = ''.join([i for i in x if i.isdigit()])
'111111'
>>> string = ''.join([i for i in x if i.isalpha()])
'aaaa'
或者你可以在这里使用regex:
>>> x = '111aa111aa'
>>> import re
>>> numbers = ''.join(re.findall(r'\d+', x))
'111111'
>>> string = ''.join(re.findall(r'[a-zA-Z]', x))
'aaaa'
【讨论】:
>>> my_string = '111aa111aa'
>>> ''.join(filter(str.isdigit, my_string))
'111111'
>>> ''.join(filter(str.isalpha, my_string))
'aaaa'
【讨论】:
尝试使用isalpha 处理字符串和isdigit 处理数字,
In [45]: a = '111aa111aa'
In [47]: ''.join([i for i in a if i.isalpha()])
Out[47]: 'aaaa'
In [48]: ''.join([i for i in a if i.isdigit()])
Out[48]: '111111'
或
In [18]: strings,numbers = filter(str.isalpha,a),filter(str.isdigit,a)
In [19]: print strings,numbers
aaaa 111111
【讨论】:
正如您提到的,您是 Python 新手,大多数使用 str.join 与列表推导或函数样式的方法就足够了。或者,我提供了一些使用 dictionaries 的选项,这些选项可以帮助组织数据,从基本示例到中级示例,可以说是越来越复杂。
基本替代
# Dictionary
d = {"Number":"", "String":""}
for char in s:
if char.isdigit():
d["Number"] += char
elif char.isalpha():
d["String"] += char
d
# {'Number': '111111', 'String': 'aaaa'}
d["Number"] # access by key
# '111111'
import collections as ct
# Default Dictionary
dd = ct.defaultdict(str)
for char in s:
if char.isdigit():
dd["Number"] += char
elif char.isalpha():
dd["String"] += char
dd
【讨论】: