Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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_Python 3.x - Fatal编程技术网

Python 如何只在最后一次正则表达式/(如果存在多次)

Python 如何只在最后一次正则表达式/(如果存在多次),python,regex,python-3.x,Python,Regex,Python 3.x,如果前面没有其他斜杠,我只需要删除最后一个斜杠后面的字符串 我试图使用这个正则表达式/(?:(?!/)+$,但它并没有删除我想要的内容 我需要转换以下网址 发件人: http://69.162.64.252:8692/live http://rvn01.painelstream.net:8638 http://2.stm-ip.com:8578/;stream.mp3 http://stm51.streamingbage.net.br:18164 http

如果前面没有其他斜杠,我只需要删除最后一个斜杠后面的字符串

我试图使用这个正则表达式
/(?:(?!/)+$
,但它并没有删除我想要的内容

我需要转换以下网址

发件人:

    http://69.162.64.252:8692/live
    http://rvn01.painelstream.net:8638
    http://2.stm-ip.com:8578/;stream.mp3
    http://stm51.streamingbage.net.br:18164
    http://audio1.cmaudioevideo.com:8346/stream
    http://radio.radionaturezafm.com.br:9994
    http://srv-stream.sisdera.com:8000/SOCIEDADECARNAVA
    http://stm1.srvaudio.com.br:9422/;type=mp3
    https://streaming.speedrs.com.br/radio/8050/jaboticaba
    http://hts03.kshost.com.br:8014/live
预期:

    http://69.162.64.252:8692
    http://rvn01.painelstream.net:8638
    http://2.stm-ip.com:8578
    http://stm51.streamingbage.net.br:18164
    http://audio1.cmaudioevideo.com:8346
    http://radio.radionaturezafm.com.br:9994
    http://srv-stream.sisdera.com:8000
    http://stm1.srvaudio.com.br:9422
    https://streaming.speedrs.com.br/radio/8050
    http://hts03.kshost.com.br:8014
但实际结果是:

    http://69.162.64.252:8692
    http:
    http://2.stm-ip.com:8578
    http:
    http://audio1.cmaudioevideo.com:8346
    http:
    http://srv-stream.sisdera.com:8000
    http://stm1.srvaudio.com.br:9422
    https://streaming.speedrs.com.br/radio/8050
    http://hts03.kshost.com.br:8014
看看我的。

试试这个

s = "http://69.162.64.252:8692/live"
gs = "/".join(s.split("/")[:-1])
输出

'http://69.162.64.252:8692'

一个没有使用正则表达式的简单解决方案。请注意,仅当url的长度超过2时,才会应用此选项:

urls = ['http://69.162.64.252:8692/live',
        'http://rvn01.painelstream.net:8638',
        'http://2.stm-ip.com:8578/;stream.mp3',
        'http://stm51.streamingbage.net.br:18164',
        'http://audio1.cmaudioevideo.com:8346/stream',
        'http://radio.radionaturezafm.com.br:9994',
        'http://srv-stream.sisdera.com:8000/SOCIEDADECARNAVA',
        'http://stm1.srvaudio.com.br:9422/;type=mp3',
        'https://streaming.speedrs.com.br/radio/8050/jaboticaba',
        'http://hts03.kshost.com.br:8014/live']

for url in urls:
    if url.count('/') > 2:
        url = url[:url.rindex('/')]
    print(url)
输出

http://69.162.64.252:8692
http://rvn01.painelstream.net:8638
http://2.stm-ip.com:8578
http://stm51.streamingbage.net.br:18164
http://audio1.cmaudioevideo.com:8346
http://radio.radionaturezafm.com.br:9994
http://srv-stream.sisdera.com:8000
http://stm1.srvaudio.com.br:9422
https://streaming.speedrs.com.br/radio/8050
http://hts03.kshost.com.br:8014             
您可以在包含两个以上
/
的url上使用
rsplit('/',1)
,这将从url末尾删除第一个
/

urls = ['http://69.162.64.252:8692/live', 'http://rvn01.painelstream.net:8638', 'http://2.stm-ip.com:8578/;stream.mp3', 'http://stm51.streamingbage.net.br:18164', 'http://audio1.cmaudioevideo.com:8346/stream', 'http://radio.radionaturezafm.com.br:9994', 'http://srv-stream.sisdera.com:8000/SOCIEDADECARNAVA', 'http://stm1.srvaudio.com.br:9422/;type=mp3', 'https://streaming.speedrs.com.br/radio/8050/jaboticaba', 'http://hts03.kshost.com.br:8014/live']
results = [url.rsplit('/', 1)[0] if url.count('/') > 2 else url for url in urls]

for result in results:
    print(result)
输出

http://69.162.64.252:8692
http://rvn01.painelstream.net:8638
http://2.stm-ip.com:8578
http://stm51.streamingbage.net.br:18164
http://audio1.cmaudioevideo.com:8346
http://radio.radionaturezafm.com.br:9994
http://srv-stream.sisdera.com:8000
http://stm1.srvaudio.com.br:9422
https://streaming.speedrs.com.br/radio/8050
http://hts03.kshost.com.br:8014

对于正则表达式,您可以使用

(?<!/)/[^/]*$
(?
看

详细信息

  • (?-no
    /
    之前不允许
  • /
    -a
    /
    字符
  • [^/]*
    -0个或更多字符,而不是
    /
  • $
    -字符串结束

使用.split(“/”[-1]您将获得最后一部分,如果您想要第一部分“/”。加入(您的string.split(“/”[:-1])您
(?),但在Python中还有其他处理URL的方法,例如使用@WiktorStribiż有吗?我不知道其他方法如何ways@WiktorStribiżew如果您想添加答案,只需检查此问题的答案,请随意=)有人认为这是一个完全不相关的答案。也许你应该使用其他解决方案。http:/http:/http:/http:/not work