在Python中通过REGEX定位项目的索引

时间:2013-07-23 11:22:37

标签: python regex search loops match

我撞墙了,需要一些帮助。

上下文:我有一个字符串列表列表。

 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循环只搜索数字和数字的方法,一个项目包含数字和符号,不应该包含该索引。

希望有意义!

感谢

1 个答案:

答案 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

^匹配字符串的开头,$匹配字符串的结尾。