Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式竖条_Python_Regex - Fatal编程技术网

Python 正则表达式竖条

Python 正则表达式竖条,python,regex,Python,Regex,我想在1个围棋中找到这些的所有匹配项: http://somewebsite/usr/blah_blah http://somewebsite/ch/blah_blah_blah 我试过使用竖条,但没有成功 matches = re.findall('http://somewebsite/(usr|ch)/(.*?)', line, re.DOTALL) 我不想做两个单独的正则表达式,我想用竖条(或)在正则表达式上面加上一个 有什么建议吗?请帮忙。谢谢。如果您想匹配从http链接开始的整行

我想在1个围棋中找到这些的所有匹配项:

http://somewebsite/usr/blah_blah

http://somewebsite/ch/blah_blah_blah
我试过使用竖条,但没有成功

matches = re.findall('http://somewebsite/(usr|ch)/(.*?)', line, re.DOTALL)
我不想做两个单独的正则表达式,我想用竖条(或)在正则表达式上面加上一个


有什么建议吗?请帮忙。谢谢。

如果您想匹配从
http
链接开始的整行内容,那么您必须做两件事

  • 删除正则表达式中
    http
    之前存在的空格

  • 将所有捕获组转换为非捕获组

  • 将非贪婪正则表达式转换为greey

  • 所以你的正则表达式一定是

    matches = re.findall(r'\bhttp://somewebsite/(?:usr|ch)/.*', line, re.DOTALL)
    
    如果只想提取在
    usr
    ch
    之后存在的零件,则仅将捕获组应用于以下
    *

    matches = re.findall(r'\bhttp://somewebsite/(?:usr|ch)/(.*)', line, re.DOTALL)
    

    有几件事需要做。如前所述,删除空白,将其视为存在空白。接下来,您未能转义/字符。最后,问号字符告诉表达式停止查看某个点。尝试以下方法

     matches = re.findall('http:\/\/somewebsite\/(usr|ch)\/.*', line, re.DOTALL)
    
    最后,括号可用于验证码数据。如果你想要完整的地址,就不要写了。在python中,组0将具有完全匹配。java和大多数其他语言也是如此。这似乎是python,因此[x[0]for x in matches]将给出整个链接的列表


    更多信息可从以下网址获得。

    为您提供一个更一般的示例;实际上,最合适的解决方案可能取决于一些尚未给出的信息:

        test1 = "xxx http://somewebsite/usr/blah_blah/baff_blaff"
        test2 = "yyy http://somewebsite/log/blah_blah_blah"
        test3 = "zzzzhttp://somewebsite/ch/blah_blah_blah_blah/ ZZZ"
    
        matches = re.findall(r'http://somewebsite/(?:usr|ch)/(\w*)', test1 + '\n' + test2 + '\n' + test3)
    
        print(matches)
    
    
    >>> ['blah_blah', 'blah_blah_blah_blah']
    

    我认为您应该删除
    regex
    http
    之前的空白。。尝试it@helpme您的预期输出是什么?很抱歉出现了空白-太完美了。非常感谢。对不起,输入了空格。(*)和?:玩这个把戏。祝你有一个愉快的一天。@帮我,我建议你阅读