我撞墙了,需要一些帮助。
上下文:我有一个字符串列表列表。
Matrix = [['444'],
['23%'],
['A']]
目前,我们列出了0位的计数,1的百分比和2的显着性测试。
列表中的列表数量会不时从3变为2。并且列表中的字符串类型会更改位置。所以我不能假设索引0将始终为Counts,百分比将为1等。
因此,我想找到一种动态找出百分比的方法,例如,在Matrix中的位置,以及它是否在那里。
这是我到目前为止所写的内容:
for i, row in enumerate(Matrix):
for cell in row:
if "%" in cell:
percent = i
print percent
for i, row in enumerate(Matrix):
for cell in row:
if re.search('[a-zA-Z]', cell):
sigtest = i
print sigtest
for i, row in enumerate(Matrix):
for cell in row:
if re.search('[0-9]', cell):
count = i
print count
输出:
1
2
0
1
问题:正如您所看到的,问题位于最后一个for循环,它记录了索引0和1包含数字的事实。
需要什么:最后一个for循环只搜索数字和数字的方法,一个项目包含数字和符号,不应该包含该索引。
希望有意义!
感谢
答案 0 :(得分:1)
要检查字符串是否仅包含您可以使用的数字:
>>> bool(re.search(r'^[0-9]+$', '4444'))
True
>>> '4444'.isdigit() #Doesn't work for floats
True
# This will work for floats as well
>>> bool(re.search(r'^[0-9]*(\.[0-9]+)?$', '4444.123'))
True
>>> bool(re.search(r'^[0-9]*(\.[0-9]+)?$', '.123'))
True
对于百分比,您可以使用此regex
>>> bool(re.search(r'^[0-9]+%$', '23%'))
True
#To handle floats as well use this:
>>> bool(re.search(r'^[0-9]*(\.[0-9]+)?%$', '23.15%'))
True
>>> bool(re.search(r'^[0-9]*(\.[0-9]+)?%$', '.150%'))
True
对于sigtest:
>>> bool(re.search(r'^[a-z]$', 'a',re.I))
True
>>> bool(re.search(r'^[a-z]$', 'B',re.I))
True
此处^
和$
为meta-characters:
^
匹配字符串的开头,$
匹配字符串的结尾。