Python 多个换行符的正则表达式
Python regex over multiple newlines
我有一个包含多个文件路径的字符串,其中一些包含路径中的任意换行符,我想使用 python 解析该字符串,以便仅保留文件名和扩展名。
例如:
a/b/c/d/file1.c
a/b/c/d/e/f/g/h/1/2/3/4/5/foo.c
dir1/dir2/newlinedir
/nextlinedir/bar.c
应该被解析以给出输出:
file1.c
foo.c
bar.c
我正在使用以下正则表达式(文件名和扩展名的组必须分开以备后用):
path_regex = re.compile(r'.*\/([^\/\.]*)(\.c){0,1}$', re.MULTILINE)
path_regex.sub(r'\g<1>\g<2>', input_string)
这将适用于具有单行路径但不适用于包含换行符的路径的字符串。
我该怎么办?
试试这个正则表达式:(?:.*\/)(.+)\.(.+)
使用 \1 访问文件名,使用 \2 访问扩展名
你可以试试这个,
>>> s = '''a/b/c/d/file1.c
a/b/c/d/e/f/g/h/1/2/3/4/5/foo.c
dir1/dir2/newlinedir
/nextlinedir/bar.c'''
>>> print(re.sub(r'(?s).*?([^/]+\.c)', r'\n', s))
file1.c
foo.c
bar.c
或
>>> print(re.sub(r'(?s).*?([^/]+)(\.[^.\n]+)(?=$|\n)', r'\n', s))
file1.c
foo.c
bar.c
^([\s\S]*?\/)(\w+\.c)
尝试 this.See demo.This 会起作用 multiline
too.Use m
或 multiline
标志。
这个简单的正则表达式也有效,您可以使用 \1
访问带扩展名的文件名
([^/]*\.\w+)
从技术上讲,这不是您要的,但这里的正则表达式可能不是正确的工具,因为 now you have two problems.
我认为这就是您要搜索的内容:
pydoc os.path.basename
所以试试这个:
map(os.path.basename, text.split('\n'))
我有一个包含多个文件路径的字符串,其中一些包含路径中的任意换行符,我想使用 python 解析该字符串,以便仅保留文件名和扩展名。
例如:
a/b/c/d/file1.c
a/b/c/d/e/f/g/h/1/2/3/4/5/foo.c
dir1/dir2/newlinedir
/nextlinedir/bar.c
应该被解析以给出输出:
file1.c
foo.c
bar.c
我正在使用以下正则表达式(文件名和扩展名的组必须分开以备后用):
path_regex = re.compile(r'.*\/([^\/\.]*)(\.c){0,1}$', re.MULTILINE)
path_regex.sub(r'\g<1>\g<2>', input_string)
这将适用于具有单行路径但不适用于包含换行符的路径的字符串。 我该怎么办?
试试这个正则表达式:(?:.*\/)(.+)\.(.+)
使用 \1 访问文件名,使用 \2 访问扩展名
你可以试试这个,
>>> s = '''a/b/c/d/file1.c
a/b/c/d/e/f/g/h/1/2/3/4/5/foo.c
dir1/dir2/newlinedir
/nextlinedir/bar.c'''
>>> print(re.sub(r'(?s).*?([^/]+\.c)', r'\n', s))
file1.c
foo.c
bar.c
或
>>> print(re.sub(r'(?s).*?([^/]+)(\.[^.\n]+)(?=$|\n)', r'\n', s))
file1.c
foo.c
bar.c
^([\s\S]*?\/)(\w+\.c)
尝试 this.See demo.This 会起作用 multiline
too.Use m
或 multiline
标志。
这个简单的正则表达式也有效,您可以使用 \1
访问带扩展名的文件名([^/]*\.\w+)
从技术上讲,这不是您要的,但这里的正则表达式可能不是正确的工具,因为 now you have two problems.
我认为这就是您要搜索的内容:
pydoc os.path.basename
所以试试这个:
map(os.path.basename, text.split('\n'))