正则表达式匹配尽可能少的字符
Regular expression to match as less characters as possible
我想从 a/b/c/x.py
匹配 x.py
,当我使用 re
:
s = 'a/b/c/x.py'
res = re.search('/(.*.py)?', s).group(1)
>>> res = b/c/x.py
这不是我需要的。有什么想法吗?
import re
s = 'a/b/c/x.py'
res = re.search('\w*\.py', s).group() # It will match alphanumeric
# res = re.search(r'[\w&.-]+$', s).group()
# The above regex will match alphanumeric and the given special characters
编辑
要匹配最后一个 /
之后的所有内容,您可以使用以下正则表达式
res = re.search('[^/]+$', s).group()
我更喜欢这里的拆分方法:
s = 'a/b/c/x.py'
last = s.split('/')[-1]
print(last) # x.py
您不需要正则表达式,只需使用 str.rsplit
和 maxsplit=1
,然后取最后一项:
>>> s.rsplit('/',1)[-1]
'x.py'
如果你需要确保元素是路径中的最后一个,你可以在前面加上(?<=\/)
,一个积极的后视:
>>> s = 'a/b/c/x.py'
>>> el = re.search(r"(?<=\/)(\w+\.py)", s).group(1)
>>> el
'x.py'
否则,如果你还需要匹配filename.py
,你需要删除它:
>>> s2 = 'file.py'
>>> el = re.search(r"(\w+\.py)", s2).group(1)
>>> el
'file.py'
当你想从路径中提取文件名时,你应该使用os.path.split
。 Python中的os.path.split()
方法用于将路径名拆分为独立于OS的一对头尾。在这里,tail 是最后一个路径名组件,head 是指向它的所有内容。
import os
path = 'a/b/c/x.py'
res = os.path.split(path)
print(res[1])
您还可以使用 normpath
和 os.sep
解决此问题:
import os
path = 'a/b/c/x.py'
path = os.path.normpath(path)
res = path.split(os.sep)
print(res[-1])
您可以像@ThePyGuy 在这种情况下所说的那样使用 rsplit
,通过将行更改为:
来避免更多拆分
res = path.rsplit(os.sep,1)
我想从 a/b/c/x.py
匹配 x.py
,当我使用 re
:
s = 'a/b/c/x.py'
res = re.search('/(.*.py)?', s).group(1)
>>> res = b/c/x.py
这不是我需要的。有什么想法吗?
import re
s = 'a/b/c/x.py'
res = re.search('\w*\.py', s).group() # It will match alphanumeric
# res = re.search(r'[\w&.-]+$', s).group()
# The above regex will match alphanumeric and the given special characters
编辑
要匹配最后一个 /
之后的所有内容,您可以使用以下正则表达式
res = re.search('[^/]+$', s).group()
我更喜欢这里的拆分方法:
s = 'a/b/c/x.py'
last = s.split('/')[-1]
print(last) # x.py
您不需要正则表达式,只需使用 str.rsplit
和 maxsplit=1
,然后取最后一项:
>>> s.rsplit('/',1)[-1]
'x.py'
如果你需要确保元素是路径中的最后一个,你可以在前面加上(?<=\/)
,一个积极的后视:
>>> s = 'a/b/c/x.py'
>>> el = re.search(r"(?<=\/)(\w+\.py)", s).group(1)
>>> el
'x.py'
否则,如果你还需要匹配filename.py
,你需要删除它:
>>> s2 = 'file.py'
>>> el = re.search(r"(\w+\.py)", s2).group(1)
>>> el
'file.py'
当你想从路径中提取文件名时,你应该使用os.path.split
。 Python中的os.path.split()
方法用于将路径名拆分为独立于OS的一对头尾。在这里,tail 是最后一个路径名组件,head 是指向它的所有内容。
import os
path = 'a/b/c/x.py'
res = os.path.split(path)
print(res[1])
您还可以使用 normpath
和 os.sep
解决此问题:
import os
path = 'a/b/c/x.py'
path = os.path.normpath(path)
res = path.split(os.sep)
print(res[-1])
您可以像@ThePyGuy 在这种情况下所说的那样使用 rsplit
,通过将行更改为:
res = path.rsplit(os.sep,1)