我有像
这样的字符串uint8_t
char[5]
int[3]
如何编写一个简短的函数来分别以优雅的方式获取类型和长度
例如
uint8_t // return 'uint8_t', '1'
char[5] // return 'char', '5'
...
答案 0 :(得分:3)
让它成为一个单行:
import re
def type_and_size(s):
return re.split('[][]', s+'[1]', 2)[:2]
type_and_size('char')
['char', '1']
type_and_size('char[5]')
['char', '5']
显然你可以这样做:
type, size = type_and_size('char[5]')
答案 1 :(得分:0)
In [1]: import re
In [2]: r = re.compile('([\w_]+)(?:\[(\d+)\])?')
In [3]: m = r.match('char[5]')
In [4]: m.group(1), m.group(2) or 1
Out[4]: ('char', '5')
In [5]: m = r.match('uint8_t')
In [6]: m.group(1), m.group(2) or 1
Out[6]: ('uint8_t', 1)
制作一个功能留给读者练习。
答案 2 :(得分:0)
import re
def parse_type(text):
match = re.match(r'(.+)\[(\d+)\]', text)
if match:
return match.groups()
return text, 1
print parse_type('uint8_t')
print parse_type('char[5]')
print parse_type('int[3]')
答案 3 :(得分:0)
给出这些测试:
>>> s = "char[5]"
>>> p = s.split("[")
>>> p
['char', '5]']
>>> p[1].strip("]")
'5'
>>> s = "uint8_t"
>>> p = s.split("[")
>>> p
['uint8_t']
>>>
这里有一个小功能,可以满足您的需求:
def SplitNicely(s):
p = s.split("[")
if len(p) == 1:
size = 1
else:
size = int(p[1].strip("]"))
return p[0], size
更多错误检查也很有用