我正在尝试编写一个函数来查找句子具有特定数字的天气(即:1),但不包含任何其他包含两个或更多1位数的数字(即:11,101,111)。
如果单词为"something1.jpg"
,则应返回1
如果单词是"something11.jpg"
我试过了:
i = 1
word = "Actin11.png"
pattern = str(i) + "(?!" + str(i) + ")"
patComp = re.compile(pattern)
编译但在“Actin11.png”上返回1。我猜是因为它识别出跟随的那个但是点。
答案 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}}部分匹配。