繁体   English   中英

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

[英]Repeated Number in Python Regular expression

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

如果单词是"something1.jpg"则应返回1;如果单词是"something1.jpg"则应返回“无"something11.jpg"

我努力了:

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

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

你可以用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
def foo(i, word):
    i = str(i)
    if 2*i in word:
        return None
    return 1

如果我了解您想要的内容,那么它是一个数字而无需继续输入/后跟另一个数字。

如果是这样,您可以执行以下操作:

>>> 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']

试试这个

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")

一个正则表达式可以做到这一点(检查字符串中的位数不超过一个)

(?!1.*1)

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM