Python正则表达式中的重复数字

时间:2014-04-07 04:52:13

标签: python regex

我正在尝试编写一个函数来查找句子具有特定数字的天气(即:1),但不包含任何其他包含两个或更多1位数的数字(即:11,101,111)。

如果单词为"something1.jpg",则应返回1 如果单词是"something11.jpg"

,则应返回None

我试过了:

i = 1
word = "Actin11.png"
pattern = str(i) + "(?!" + str(i) + ")"
patComp = re.compile(pattern)

编译但在“Actin11.png”上返回1。我猜是因为它识别出跟随的那个但是点。

5 个答案:

答案 0 :(得分:0)

您可以使用count

i = str(1) 
word = "Actin11.png"
A=word.count(i)

if A==1:
    print "do something"
else:
    print word +" has zero or more than one " +i

答案 1 :(得分:0)

def foo(i, word):
    i = str(i)
    if 2*i in word:
        return None
    return 1

答案 2 :(得分:0)

如果我理解你想要的东西,那么它是一个数字而不是继续/后跟另一个数字。

如果是这样,你可以这样做:

>>> st='3 eaxmple1.jpg example22.jpg 4'
>>> re.findall(r'(?:\D|^)(\d)(?:\D|$)', st)
['3', '1', '4']

或者,背后的负面前瞻和负面看法:

>>> re.findall(r'(?<!\d)(\d)(?!\d)', st)
['3', '1', '4']

答案 3 :(得分:0)

试试这种方式,

import re


def find_match(jpg):
    pat = "\d+"
    x = re.search(pat, jpg)
    if x:
        if x.group(0) == '1':
            return 1
        elif x.group(0) == '11':
            return None
    else:
        return "Not matched"

print find_match("Actin11.png")
print find_match("Actin1.png")

答案 4 :(得分:0)

一个正则表达式(检查字符串中的数字不超过一个)将是

(?!1.*1)

因此,如果您想动态构建它,

pattern = r"(?!" + str(i) + r".*" + str(i) + r")"

仅供参考,您的正则表达式失败,因为1(?!1)1.的{​​{1}}部分匹配。