[英]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.png
的1.
部分匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.