当前位置:

首页 > 编程开发 > 正则表达式识别字符串中路径及文件名示例代码

正则表达式识别字符串中路径及文件名示例代码

本文目录

    使用C#和C++正则表达式,定义匹配文件路径与文件夹的模式,可从含特殊字符的字符串中提取所有路径,支持Unicode及多种字符集,实现路径识别与提取功能,适用于日志分析、文件处理、数据清洗等场景,提高解析效率。

    c#写法:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Threading.Tasks;
    
    namespace ConsoleApp2
    {
        class FilePathExtractor
        {
            static void Main()
            {
                // 示例输入字符串,包含多个文件路径
                //string input = @"Command line: C:\路径\新建文件夹\未全额问问去kjhkjhkjdsa\$@[]&123øΩÔøΩÕº∆ご中?\?☀\☺❥(^_-)づ ̄3 ̄)づ╭❤~\fatf    hsouia_ba s d d e w w(´▽`)ノノ\e w w(´▽`)ノノ\wqeeeed\啊啊额外的色的\飒飒我请问饿威尔第额额威风啊其中的发feffdfvFDVFVDfdvfdz\jhshjsaksfksksfjsajasjsajsadksdksdklsadlk\jskjhssdd,saisyuuyawea\12345678912345.txt C:\路径\新建文件夹\未全额问问去kjhkjhkjdsa\$@[]&123øΩÔøΩÕº∆ご中?\?☀\☺❥(^_-)づ ̄3 ̄)づ╭❤~\fatf    hsouia_ba s d d e w w(´▽`)ノノ\e w w(´▽`)ノノ\wqeeeed\啊啊额外的色的\飒飒我请问饿威尔第额额威风啊其中的发feffdfvFDVFVDfdvfdz\jhshjsaksfksksfjsajasjsajsadksdksdklsadlk\jskjhssdd,saisyuuyawea\20250616-11044.mp4";
                string input = @"C:\Users\M58\Desktop\771MB C:\Users\M58\Desktop\bug记录.xlsx C:\Users\M58\Desktop\vpl使用.docx C:\Users\M58\Desktop\Screenshot_2025-05-09-09-53-06-086_com.miui.packageinstaller.jpg ";
                // 定义正则表达式模式
                //string pattern = @"(?:([a-zA-Z]:[\\/])([^<>:\""/\\|?*]+[\\/])*)(?:[^<>:\""/\\|?*]+\.[^\s\""]*)"; //只匹配文件
                string pattern = @"(?:([a-zA-Z]:[\\/])([^<>:\""/\\|?*]+[\\/])*)(?:[^<>:\""/\\|?*]+(?![^\s\""]))";//匹配所有(文件及文件夹)
                // 创建正则表达式对象,忽略模式中的空白并启用多行模式
                Regex regex = new Regex(pattern, RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline);
                // 查找所有匹配项
                MatchCollection matches = regex.Matches(input);
                // 输出匹配到的文件路径
                Console.WriteLine("找到的文件路径:");
                foreach (Match match in matches)
                {
                    Console.WriteLine(match.Value);
                }
                Console.WriteLine("结束");
            }
        }
    }

    c++代码:

    c++目前的实现跟转义字符的处理方式有关,测试时可能遇到一些小问题,后续有时间再进一步完善。

    std::vector extractPaths(const std::string& text) {
        std::vector paths;
        // 定义正则表达式模式
        //string str = R"((([a-zA-Z]:[\\/])([^<>:"/\\|?*]+[\\/])*(?:[^<>:"/\\|?*]+(?![^\s"]))*))";//匹配正常路径
        string str = R"((([a-zA-Z]:[\\/])([^<>:"/\\|?*]+[\\/])*(?:[^<>:"/\\|?*]+(?![^\s"]))*))";//匹配正常路径
        //string str = R"((?:([a-zA-Z]:[\\/])([^<>:\"/\\|?*]+[\\/])*)(?:[^<>:\"/\\|?*]+(?![^\s\"])))";//匹配文件及文件夹
        std::regex  pathPattern(str);
        // 使用迭代器遍历所有匹配结果
        auto words_begin = std::sregex_iterator(text.begin(), text.end(), pathPattern);
        auto words_end = std::sregex_iterator();
        for (std::sregex_iterator i = words_begin; i != words_end; i++)
        {
            std::smatch match = *i;
            paths.push_back(match.str(1));
        }
        return paths;
    }
    
    int main()
    {
        // 示例输入字符串,包含多个文件路径
        //string input = R"(C:\路径\新建文件夹\未全额问问去kjhkjhkjdsa\$@[]&123øΩÔøΩÕº∆ご中?\?☀\☺❥(^_-)づ ̄3 ̄)づ╭❤~\fatf    hsouia_ba s d d e w w(´▽`)ノノ\e w w(´▽`)ノノ\wqeeeed\啊啊额外的色的\飒飒我请问饿威尔第额额威风啊其中的发feffdfvFDVFVDfdvfdz\jhshjsaksfksksfjsajasjsajsadksdksdklsadlk\jskjhssdd,saisyuuyawea\20250616-11044.mp4 ""C:\路径\新建文件夹\未全额问问去kjhkjhkjdsa\$@[]&123øΩÔøΩÕº∆ご中?\?☀\☺❥(^_-)づ ̄3 ̄)づ╭❤~\fatf    hsouia_ba s d d e w w(´▽`)ノノ\e w w(´▽`)ノノ\wqeeeed\啊啊额外的色的\飒飒我请问饿威尔第额额威风啊其中的发feffdfvFDVFVDfdvfdz\jhshjsaksfksksfjsajasjsajsadksdksdklsadlk\jskjhssdd,saisyuuyawea\12 3"" ""C:\路径\新建文件夹\未全额问问去kjhkjhkjdsa\$@[]&123øΩÔøΩÕº∆ご中?\?☀\☺❥(^_-)づ ̄3 ̄)づ╭❤~\fatf    hsouia_ba s d d e w w(´▽`)ノノ\e w w(´▽`)ノノ\wqeeeed\啊啊额外的色的\飒飒我请问饿威尔第额额威风啊其中的发feffdfvFDVFVDfdvfdz\jhshjsaksfksksfjsajasjsajsadksdksdklsadlk\jskjhssdd,saisyuuyawea\1^_1.txt"" ""C:\路径\新建文件夹\未全额问问去kjhkjhkjdsa\$@[]&123øΩÔøΩÕº∆ご中?\?☀\☺❥(^_-)づ ̄3 ̄)づ╭❤~\fatf    hsouia_ba s d d e w w(´▽`)ノノ\e w w(´▽`)ノノ\wqeeeed\啊啊额外的色的\飒飒我请问饿威尔第额额威风啊其中的发feffdfvFDVFVDfdvfdz\jhshjsaksfksksfjsajasjsajsadksdksdklsadlk\jskjhssdd,saisyuuyawea\1  4.txt")";
        //string input = R"(C:\路径\新建文件夹\未全额问问去kjhkjhkjdsa\$@[]&123øΩÔøΩÕº∆ご中?\?☀\☺❥(^_-)づ ̄3 ̄)づ╭❤~\fatf    hsouia_ba s d d e w w(´▽`)ノノ\e w w(´▽`)ノノ\wqeeeed\啊啊额外的色的\飒飒我请问饿威尔第额额威风啊其中的发feffdfvFDVFVDfdvfdz\jhshjsaksfksksfjsajasjsajsadksdksdklsadlk\jskjhssdd,saisyuuyawea\12345678912345.txt C:\路径\新建文件夹\未全额问问去kjhkjhkjdsa\$@[]&123øΩÔøΩÕº∆ご中?\?☀\☺❥(^_-)づ ̄3 ̄)づ╭❤~\fatf    hsouia_ba s d d e w w(´▽`)ノノ\e w w(´▽`)ノノ\wqeeeed\啊啊额外的色的\飒飒我请问饿威尔第额额威风啊其中的发feffdfvFDVFVDfdvfdz\jhshjsaksfksksfjsajasjsajsadksdksdklsadlk\jskjhssdd,saisyuuyawea\20250616-11044.mp4)";
        string input = R"(C:\Users\M5,8\$@[]&123øΩÔøΩÕº∆ご中?\Deskt op\771MB C:\Users\M58\Desktop\bug记录.xlsx C:\Users\M58\Desktop\vpl使用.docx C:\Users\M58\Desktop\Screenshot_2025-05-09-09-53-06-086_com.miui.packageinstaller.jpg )";
        std::vector paths = extractPaths(input);
        std::cout << "从字符串中提取的路径:" << std::endl;
        for (const auto& path : paths) {
            std::cout << path << std::endl;
        }
    }

    下表列出了所有的元字符和对它们的一个简短的描述

    元字符描述

    \

    将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如,“\\n”匹配\n。“\n”匹配换行符。序列“\\”匹配“\”而“\(”则匹配“(”。即相当于多种编程语言中都有的“转义字符”的概念。

    ^

    匹配输入字行首。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。

    $

    匹配输入行尾。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。

    *

    匹配前面的子表达式任意次。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。*等价于{0,}。

    +

    匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。

    ?

    匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”。?等价于{0,1}。

    {n}

    n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。

    {n,}

    n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。

    {n,m}

    m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o为一组,后三个o为一组。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。

    ?

    当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少地匹配所搜索的字符串,而默认的贪婪模式则尽可能多地匹配所搜索的字符串。例如,对于字符串“oooo”,“o+”将尽可能多地匹配“o”,得到结果[“oooo”],而“o+?”将尽可能少地匹配“o”,得到结果 ['o', 'o', 'o', 'o']

    .

    匹配除“\n”和"\r"之外的任何单个字符。要匹配包括“\n”和"\r"在内的任何字符,请使用像“[\s\S]”的模式。

    (pattern)

    匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用“\(”或“\)”。

    (?:pattern)

    非获取匹配,匹配pattern但不获取匹配结果,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分时很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。

    (?=pattern)

    非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

    (?!pattern)

    非获取匹配,正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。

    (?<=pattern)

    非获取匹配,反向肯定预查,与正向肯定预查类似,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。

    *python的正则表达式没有完全按照正则表达式规范实现,所以一些高级特性建议使用其他语言如ja va、scala等

    (?

    非获取匹配,反向否定预查,与正向否定预查类似,只是方向相反。例如“(?

    *python的正则表达式没有完全按照正则表达式规范实现,所以一些高级特性建议使用其他语言如ja va、scala等

    x|y

    匹配x或y。例如,“z|food”能匹配“z”或“food”(此处请谨慎)。“[z|f]ood”则匹配“zood”或“food”。

    []

    字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。

    [^]

    负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”任一字符。

    [a-z]

    字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。

    注意:只有连字符在字符组内部时,并且出现在两个字符之间时,才能表示字符的范围; 如果出字符组的开头,则只能表示连字符本身.

    [^a-z]

    负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。

    \b

    匹配一个单词的边界,也就是指单词和空格间的位置(即正则表达式的“匹配”有两种概念,一种是匹配字符,一种是匹配位置,这里的\b就是匹配位置的)。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”;“\b1_”可以匹配“1_23”中的“1_”,但不能匹配“21_3”中的“1_”。

    \B

    匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。

    \cx

    匹配由x指明的控制字符。例如,\cM匹配一个Control-M或回车符。x的值必须为A-Z或a-z之一。否则,将c视为一个原义的“c”字符。

    \d

    匹配一个数字字符。等价于[0-9]。grep 要加上-P,perl正则支持

    \D

    匹配一个非数字字符。等价于[^0-9]。grep要加上-P,perl正则支持

    \f

    匹配一个换页符。等价于\x0c和\cL。

    \n

    匹配一个换行符。等价于\x0a和\cJ。

    \r

    匹配一个回车符。等价于\x0d和\cM。

    \s

    匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。

    \S

    匹配任何可见字符。等价于[^ \f\n\r\t\v]。

    \t

    匹配一个制表符。等价于\x09和\cI。

    \v

    匹配一个垂直制表符。等价于\x0b和\cK。

    \w

    匹配包括下划线的任何单词字符。类似但不等价于“[A-Za-z0-9_]”,这里的"单词"字符使用Unicode字符集。

    \W

    匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。

    \xn

    匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,“\x41”匹配“A”。“\x041”则等价于“\x04&1”。正则表达式中可以使用ASCII编码。

    \num

    匹配num,其中num是一个正整数。对所获取的匹配的引用。例如,“(.)\1”匹配两个连续的相同字符。

    \n

    标识一个八进制转义值或一个向后引用。如果\n之前至少n个获取的子表达式,则n为向后引用。否则,如果n为八进制数字(0-7),则n为一个八进制转义值。

    \nm

    标识一个八进制转义值或一个向后引用。如果\nm之前至少有nm个获得子表达式,则nm为向后引用。如果\nm之前至少有n个获取,则n为一个后跟文字m的向后引用。如果前面的条件都不满足,若n和m均为八进制数字(0-7),则\nm将匹配八进制转义值nm。

    \nml

    如果n为八进制数字(0-7),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。

    \un

    匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。例如,\u00A9匹配版权符号(©)。

    \p{P}

    小写 p 是 property 的意思,表示 Unicode 属性,用于 Unicode 正表达式的前缀。中括号内的“P”表示Unicode 字符集七个字符属性之一:标点字符。

    其他六个属性:

    L:字母;

    M:标记符号(一般不会单独出现);

    Z:分隔符(比如空格、换行等);

    S:符号(比如数学符号、货币符号等);

    N:数字(比如阿拉伯数字、罗马数字等);

    C:其他字符。

    *注:此语法部分语言不支持,例:ja vascript。

    \<

    \>

    匹配词(word)的开始(\<)和结束(\>)。例如正则表达式\能够匹配字符串"for the wise"中的"the",但是不能匹配字符串"otherwise"中的"the"。注意:这个元字符不是所有的软件都支持的。

    ( )

    将( 和 ) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到\9 的符号来引用。

    |

    将两个匹配条件进行逻辑“或”(or)运算。例如正则表达式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。注意:这个元字符不是所有的软件都支持的。

    本文内容来源于网友投稿,如有侵权请联系删除。
    作者最新文章
    编程开发
    相关文章 更多
    PHP递归性能优化技巧与迭代替代方案
    PHP递归性能优化技巧与迭代替代方案

    解析PHP递归函数在树形数据处理中的性能瓶颈,提供预加载数据消除I/O、使用显式栈替代深层递归的实战方案,帮助开发者在代码可读性与执行效率间做出合理取舍。

    Java测试中怎么使用Mockito模拟依赖对象
    Java测试中怎么使用Mockito模拟依赖对象

    详细讲解在Java单元测试中如何使用Mockito模拟依赖对象,包括引入依赖、创建Mock、打桩返回值、行为验证以及Mock与Spy的核心差异和常见陷阱排查。

    链表删除节点的时间复杂度是多少及其详细分析
    链表删除节点的时间复杂度是多少及其详细分析

    详细分析链表删除节点的时间复杂度,深入探讨单链表与双向链表在不同已知前提下的查找与删除开销,并结合完整代码与清晰图解进行对比总结。

    codex如何配置模型参数及文件设置教程
    codex如何配置模型参数及文件设置教程

    想知道如何让AI写出的代码更贴合你的习惯?本文手把手教你在VS Code中调整Codex相关模型参数,通过修改配置文件优化温度值和令牌限制,解决代码建议不准确或响应慢的问题。

    Claude Code AI编程工具实力揭秘与编程助手实测
    Claude Code AI编程工具实力揭秘与编程助手实测

    通过实测展示Claude Code在终端中如何理解自然语言指令、自动修改代码文件并处理复杂编程任务,帮助开发者评估其实际辅助能力。

    winforms教程自学入门与基础开发步骤详解
    winforms教程自学入门与基础开发步骤详解

    本教程详细讲解如何使用Visual Studio创建WinForms项目,通过添加按钮和标签控件并编写点击事件代码,实现一个基础的计数器功能,适合C#初学者快速上手Windows窗体应用开发。

    Cursor自动补全设置教程教你快速开启代码补全功能
    Cursor自动补全设置教程教你快速开启代码补全功能

    详解Cursor编辑器中自动补全功能的开启与优化设置,涵盖Tab触发机制、上下文窗口调整及模型切换,帮助开发者解决补全延迟、干扰大等问题,提升编码流畅度。

    pandas的数据格式怎么转换和设置方法教程
    pandas的数据格式怎么转换和设置方法教程

    详解Pandas中数据格式转换的核心方法,包括astype强制转换、to_numeric容错处理及日期解析技巧,解决常见类型错误并提升数据处理效率。

    VS Code中文设置方法 简体语言包安装与切换教程
    VS Code中文设置方法 简体语言包安装与切换教程

    详细介绍在Visual Studio Code中安装Chinese (Simplified)语言包的方法,包括通过扩展市场搜索、安装及自动重启切换至简体中文界面的完整步骤,帮助开发者快速将编辑器本地化。

    cursor安装过程无法更改安装位置的解决方法
    cursor安装过程无法更改安装位置的解决方法

    针对Cursor安装包默认锁定C盘且无路径选择界面的问题,提供通过手动移动文件并创建目录联结(Symbolic Link)的解决方案,实现将软件安装在其他磁盘分区。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    macOS软件
    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    Mac软件 更多
    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

    灵活计算器
    灵活计算器
    macOS/iOS/Android

    灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

    WINDOWS 更多
    3dmax(3ds max)
    3dmax(3ds max)
    Windows

    Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。