小编BBe*_*dit的帖子

如何使正则表达式匹配非贪心?

我在编程书中读到过.*?通常会使正则表达式不贪婪,而是匹配最短的匹配.

但是,它不能满足以下要求:

正则表达式: http.*?500.jpg

测试字符串: http://google.com<img src="http://33.google.com/image/500.jpg

我想只匹配最短的,即:http://33.google.com/image/500.jpg.

但事实并非如此.它匹配整个字符串......

我已经尝试过阅读有关正则表达式的更多内容,但是,我无法解决这个问题.

我怎样才能选择最短的字符串匹配,就像这个例子一样?

regex python-2.7

3
推荐指数
1
解决办法
3830
查看次数

如何在 OpenCV 中模板匹配简单的 2D 形状?

我想检测一个简单的 2D 棋盘上的所有棋子。问题是,我的代码只检测黑色方块上的棋子。我需要检测到所有白色棋子。这是我的设置:

棋盘(full_board.png): 在此处输入图片说明

典当 ( wp.png): 在此处输入图片说明

预期输出(检测所有 pawn): 在此处输入图片说明

实际输出(并非所有 pawn 都被检测到): 在此处输入图片说明

代码:

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 opencv image-processing

3
推荐指数
1
解决办法
1306
查看次数

如何通过添加参数来推广函数?

我正在完成一本初学者的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'是'字母'的参数,依此类推.

所以我必须遗漏一些基本的东西.

你能帮我吗?

python

2
推荐指数
1
解决办法
847
查看次数

每当我做OOP时,"超出最大递归深度"

  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问题.我的教科书中的问题是:

"通过将电视创建为对象来编写模拟电视的程序.允许用户增大/减小音量,并设置频道编号.确保频道和音量值保持在有效范围内."

我的问题是:

  1. 我的结构大致正确吗?(因为我选择制作inc/dec音量的方法等)

  2. 为什么我会收到递归错误?我想这意味着我处于某种无限循环中,但我绝对看不到它.

我未完成的"解决方案":

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

python oop recursion python-2.7

2
推荐指数
1
解决办法
122
查看次数

如何将多个正则表达式组合成一行?

我的脚本工作正常:

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 regex python-2.7

2
推荐指数
1
解决办法
7326
查看次数

退货有什么作用?什么都不会回来

我已经学习 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。

python return-value

1
推荐指数
1
解决办法
334
查看次数