【问题标题】:Locating index of item via REGEX in Python在 Python 中通过 REGEX 定位项目的索引
【发布时间】:2013-07-22 10:35:13
【问题描述】:

我碰壁了,需要一些帮助。

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

 Matrix = [['444'],
          ['23%'],
          ['A']]

目前,我们在位置 0 处有一个计数列表,在 1 处有百分比,在 2 处有显着性检验。

列表中的列表数量不时从 3 变为 2 变为 1。并且列表中字符串的类型会改变位置。所以我不能假设索引 0 总是计数和百分比将是 1 等等。

因此,我想找到一种方法来动态找出百分比在矩阵中的位置,以及它是否在矩阵中。

这是我目前所写的:

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

希望这是有道理的!

谢谢

【问题讨论】:

    标签: python regex search loops match


    【解决方案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

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

    【讨论】:

    • 你只匹配无符号数。你可以从(-|+)?开始。
    • @Ashwini,谢谢。我测试了它,问题仍然存在。如果我想在列表(矩阵)中找到百分比字符串的索引,你的代码会给我索引 0 & 1 而不是单独的 1。我猜是因为索引 0 也包含数字。理想情况下,我想运行一个函数来获取计数、百分比和显着性的索引。
    • @Boosted_d16 不,它不会,对于“444”,我的正则表达式将返回 Falsebool(re.search(r'^[0-9]+%$', '444')) --> False。你做错了什么。
    • @Ashwini,你说得对。我不知道我之前做错了什么,但是是的,它有效。再次感谢!
    猜你喜欢
    • 2016-06-26
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    相关资源
    最近更新 更多