我在编程书中读到过.*?通常会使正则表达式不贪婪,而是匹配最短的匹配.
但是,它不能满足以下要求:
正则表达式: http.*?500.jpg
测试字符串: http://google.com<img src="http://33.google.com/image/500.jpg
我想只匹配最短的,即:http://33.google.com/image/500.jpg.
但事实并非如此.它匹配整个字符串......
我已经尝试过阅读有关正则表达式的更多内容,但是,我无法解决这个问题.
我怎样才能选择最短的字符串匹配,就像这个例子一样?
我想检测一个简单的 2D 棋盘上的所有棋子。问题是,我的代码只检测黑色方块上的棋子。我需要检测到所有白色棋子。这是我的设置:
代码:
import cv2
import numpy as np
import imutils
def main():
img = cv2.imread('full_board.png', 0)
# Piece templates:
img_rgb = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
img_gray = cv2.cvtColor(img_rgb,cv2.COLOR_BGR2GRAY)
pawn_white_template = cv2.imread('wp.png', 0)
cv2.imshow("Template", pawn_white_template)
cv2.waitKey(0)
w_pawn_white, h_pawn_white = pawn_white_template.shape[::-1]
res_pawn_white = cv2.matchTemplate(img_gray,pawn_white_template,cv2.TM_CCOEFF_NORMED)
threshhold = 0.6
loc = np.where(res_pawn_white >= threshhold)
for pt in zip(*loc[::-1]):
cv2.rectangle(img_rgb,pt,(pt[0]+w_pawn_white, pt[1]+h_pawn_white),(0,255,255),1)
cv2.imshow('detected',img_rgb)
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
更改阈值对我没有帮助。我不确定为什么它只检测黑色方形棋子。任何想法如何检测所有典当?
我正在完成一本初学者的Python书.我想我明白了问题是什么.
封装到一个函数中,并将其概括为接受字符串和字母作为参数.
fruit = "banana"
count = 0
for char in fruit:
if char == 'a':
count += 1
print count
Run Code Online (Sandbox Code Playgroud)
我的回答是:
def count_letters(letter, strng):
fruit = strng
count = 0
for char in fruit:
if char == letter:
count += 1
print count
count_letters(a, banana)
Run Code Online (Sandbox Code Playgroud)
但这是错误的:名称'a'未定义.我不知道我哪里出错了.我认为翻译应该知道'a'是'字母'的参数,依此类推.
所以我必须遗漏一些基本的东西.
你能帮我吗?
File "C:\tv.py", line 20, in set_channel
self.channel = new_channel
RuntimeError: maximum recursion depth exceeded
Run Code Online (Sandbox Code Playgroud)
我正在尝试我的第一个OOP问题.我的教科书中的问题是:
"通过将电视创建为对象来编写模拟电视的程序.允许用户增大/减小音量,并设置频道编号.确保频道和音量值保持在有效范围内."
我的问题是:
我的结构大致正确吗?(因为我选择制作inc/dec音量的方法等)
为什么我会收到递归错误?我想这意味着我处于某种无限循环中,但我绝对看不到它.
我未完成的"解决方案":
# Television with Classes
# User able to enter a channel number
# and increase/decrease the volume
class Television(object):
"""A TV set."""
def __init__(self, channel = 1, volume = 20):
self.channel = channel
self.volume = volume
def get_channel(self):
"""Return current channel."""
return self.channel
def set_channel(self, new_channel):
"""Set the channel."""
if 1 < new_channel > 5:
print "Invalid Channel. Must be …Run Code Online (Sandbox Code Playgroud) 我的脚本工作正常:
images = re.findall("src.\"(\S*?media.tumblr\S*?tumblr_\S*?jpg)", doc)
videos = re.findall("\S*?(http\S*?video_file\S*?tumblr_[a-zA-Z0-9]*)", doc)
Run Code Online (Sandbox Code Playgroud)
但是,我认为两次搜索整个文档效率很低.
如果它有帮助,这是一个示例文档:http://pastebin.com/5kRZXjij
我希望以上输出如下:
images = http://37.media.tumblr.com/tumblr_lnmh4tD3sM1qi02clo1_500.jpg
videos = http://bassrx.tumblr.com/video_file/86319903607/tumblr_lo8i76CWSP1qi02cl
Run Code Online (Sandbox Code Playgroud)
相反,最好做以下事情:
image_and_video_links = re.findall(" <match-image-links-or-video links> ", doc)
Run Code Online (Sandbox Code Playgroud)
如何将两条re.findall线合并为一条?
我尝试过使用这个|角色,但总是无法匹配任何东西.所以我确信我对如何正确使用它完全感到困惑.
我已经学习 Python 好几天了。但是,我不明白返回。我从我的教科书和网上阅读了一些解释;他们没有帮助!
也许有人可以用简单的方式解释 return 的作用?我写了几个有用的(对我来说)Python 脚本,但我从来没有用过 return因为我不知道它的作用。
你能提供一个简单的例子吗来说明为什么应该使用 return 吗?
它似乎也什么都不做:
def sqrt(n):
approx = n/2.0
better = (approx + n/approx)/2.0
while better != approx:
approx = better
better = (approx + n/approx)/2.0
return approx
sqrt(25)
Run Code Online (Sandbox Code Playgroud)
我的课本告诉我: “试着用 25 作为参数调用这个函数,以确认它返回 5.0。”
我知道如何检查的唯一方法是使用print。但我不知道这是否是他们正在寻找的。问题只是说用 25 调用。它没有说要在代码中添加更多内容以确认它返回 5.0。