所有分类
  • 所有分类
  • 游戏源码
  • 网站源码
  • 单机游戏
  • 游戏素材
  • 搭建教程
  • 精品工具

Python正则识别代码中中文|英文|数字超实用详细教程

Python正则识别代码中中文|英文|数字超实用详细教程 一

文章目录CloseOpen

本文聚焦Python正则场景化应用,不讲空泛语法,直接针对“代码中的中、英、数字识别”需求:从基础规则(中文的Unicode范围、英文的大小写匹配)讲起,到实战技巧(排除代码符号干扰、分割混合内容),再到避坑指南(避免中文误判标点、英文匹配含特殊字符的情况),一步步教你写出精准正则。无论你是清洗代码文本、分析代码结构还是处理日志数据,读完就能直接上手解决问题,把正则从“难用的工具”变成“趁手的帮手”。

你有没有过这种情况?想从一堆Python代码里提取中文注释,结果用了网上找的正则,要么把标点符号也带进来,要么漏了一大半;或者想提变量名里的英文,结果连数字和下划线都一起抓了;再或者想找日志里的数字参数,结果把版本号里的小数点也漏掉了?我前两个月就帮做后端的朋友处理过这事儿——他要从几千行代码里提取所有中文注释做文档,一开始用了个简单的[u4e00-u9fa5],结果导出的内容里全是“# 获取用户信息:user_id”里的“获取用户信息”加冒号,还有“# 处理逻辑(步骤1)”里的括号,删都删不完。后来我帮他调整了正则规则,才把纯中文(连常用标点)精准提出来,他说省了整整一天的手动删改时间。今天我就把这套“踩过坑才 出来的”正则方法分享给你,不用记复杂语法,跟着做就能解决80%的代码文本提取问题。

先把“基础规则”搞明白:中文、英文、数字的正则到底怎么写?

正则这东西,核心就是“用符号描述字符范围”。我先把最常用的“目标类型+正则+场景”整理成表格,你看一眼就懂:

目标类型 基础正则表达式 常见场景 示例效果
中文(不含标点) [u4e00-u9fa5] 提取纯中文内容 匹配“你好”,不匹配“你好!”
中文(含常用标点) [u4e00-u9fa5s:,。()] 提取中文注释(带标点) 匹配“这是一个测试:获取用户信息”
纯英文(无符号) [a-zA-Z] 提取英文单词 匹配“user”,不匹配“user_name”
英文变量名(含下划线) [a-zA-Z_] 提取Python变量名 匹配“user_name”,不匹配“user123”
整数 d+ 提取日志中的整数参数 匹配“123”,不匹配“123.45”
浮点数(含整数) d+(.d+)? 提取版本号或数值参数 匹配“123”和“123.45”

我得跟你说清楚这些规则的“底层逻辑”,不然你复制过去也不知道怎么改。比如中文的[u4e00-u9fa5],这是Unicode标准里的“基本汉字区”,覆盖了我们日常用的99%的中文——像“你好”“测试”都在里面,但不包含中文标点(比如“:”“,”“()”这些)。所以如果你要提取带标点的中文注释,就得把这些标点加进正则里,比如[u4e00-u9fa5s:,。()],其中s是匹配空格(注释里经常有空格分隔内容)。

再比如英文的[a-zA-Z],只匹配大小写字母,要是你要提取Python变量名(比如user_name),就得加下划线_,变成[a-zA-Z_]——但如果你要的是“纯英文单词”(没有下划线),就别加,不然像user_name这样的变量名也会被算成“英文”。数字的d+是匹配1个或多个数字(整数),d+(.d+)?里的括号是“分组”,.d+是匹配小数点加数字,?表示这个分组“可选”,所以能同时匹配整数(比如123)和浮点数(比如123.45)。

实战技巧:从“能匹配”到“精准匹配”,我踩过的坑告诉你

光懂基础规则还不够,实际代码里的内容从来不是“纯中文/英文/数字”——比如注释里会混着英文变量名,变量名里会带数字,日志里的数字会跟符号粘在一起。我帮朋友处理代码那次,他一开始用[u4e00-u9fa5]提取中文注释,结果导出的内容里全是“获取用户信息:user_id”里的“获取用户信息”加冒号,还有“处理逻辑(步骤1)”里的括号,删都删不完。后来我给他加了“排除干扰项”的逻辑,才解决问题。

技巧1:提取Python代码里的中文注释(单行+多行)

Python代码里的注释有两种:单行的#和多行的"""/'''。我给朋友写的正则是分两步:

  • 单行注释:用r'#s([u4e00-u9fa5s:,。()]+)'——#是注释符号,s匹配后面的空格(有的注释写# 注释,有的写#注释),括号里的就是要提取的中文内容(含常用标点)。
  • 多行注释:用r'"""([sS]?)"""'——"""是多行注释的开始,[sS]匹配所有字符(包括换行),?表示“非贪婪匹配”(避免匹配到后面的"""),括号里的就是注释内容。
  • 他用这个正则跑了一遍代码,导出的注释里再也没有乱码和多余符号了——比如# 处理用户输入(必填)会提取“处理用户输入(必填)”,"""这是多行注释 包含换行和标点:比如,测试"""会提取整段内容。

    技巧2:提取变量名里的“纯英文部分”

    比如代码里有user_name = "张三"age_123 = 25,要提取变量名中的英文部分(不含数字和下划线),可以用r'([a-zA-Z]+)_?'——[a-zA-Z]+匹配连续的英文,_?匹配后面的下划线(可选)。但要注意排除Python关键词(比如ifelsefor这些系统自带的词),不然会把if也当成“英文变量名”提取出来。

    我帮做数据清洗的朋友做过这个:他要统计代码里的自定义变量名,我给他加了个“关键词过滤列表”——先把Python的关键词(用keyword模块能获取所有关键词)存成一个列表,然后把提取到的英文部分和这个列表对比,不是关键词的才保留。结果他统计出来的变量名全是自定义的,没有一个系统词,特别准确。

    技巧3:提取日志里的“数字参数”(避免匹配无效数值)

    比如日志里有"请求耗时:123.45ms,状态码:200",要提取123.45200,用d+(.d+)?就行——这个正则能匹配整数(200)和浮点数(123.45),还能过滤掉无效数值(比如123.45.67这种多小数点的)。我之前帮运营的朋友处理过接口日志,用这个正则提取“请求耗时”和“状态码”,导出的数据没有一个错的,他用这些数据做了个可视化报表,领导还夸他细心。

    避坑指南:这些错我犯过,你别再踩

  • 中文匹配别漏空格:注释里经常有空格,比如# 处理 用户输入,如果你用[u4e00-u9fa5],会把“处理”和“用户输入”分开(因为中间有空格)。所以一定要加s,比如[u4e00-u9fa5s],这样就能匹配带空格的中文了。
  • 英文匹配别包含数字:如果你要提“纯英文单词”,就用^[a-zA-Z]+$^表示字符串开头,$表示字符串 ),不然像user123这样的字符串也会被匹配到。我之前犯过这个错:想提取代码里的英文函数名,结果用了[a-zA-Z]+,把get_user123也提出来了,后来加了^$才解决。
  • 数字匹配别漏小数点:如果你要提取浮点数(比如版本号v1.0.1里的1.0.1),用d+(.d+)——*表示分组可以出现0次或多次,这样能匹配1.0.1这种多小数点的数值。但要注意,这个正则会匹配123.45.67这样的无效数值,所以如果是“有效数值”(比如价格、耗时),还是用d+(.d+)?更安全。
  • 我跟你说,正则这东西真的是“越用越熟”——你刚开始可能会觉得“怎么这么多规则”,但用个两三次,就能摸出规律了。比如你要提取中文注释,就用[u4e00-u9fa5s:,。()];要提取英文变量名,就用[a-zA-Z_];要提取数字,就看是整数还是浮点数,选对应的正则。

    如果你按这些方法试了,不管是提取中文注释、英文变量还是数字参数,欢迎回来告诉我效果!比如你有没有遇到什么奇怪的情况?或者有更好用的小技巧?咱们一起交流——毕竟正则这东西,踩过的坑越多, 的方法越实用~


    我之前帮做数据分析的朋友处理过变量名统计的事儿,他那会儿愁得直挠头——想从几百行Python代码里提取所有英文变量名,结果提出来的全是“user123”“data_456”这种带数字的,统计表格里混着一堆数字,根本没法用来分析团队的命名习惯。他跟我说:“我要的是纯英文或者带下划线的变量名,数字怎么总甩不掉啊?”

    其实解决这问题就一层窗户纸,分两种情况捋清楚就行。要是你要的是“纯纯的英文”(连下划线都不要),直接用正则[a-zA-Z]——这串符号就是专门“抓”大小写字母的,数字、下划线啥的都不沾边。比如“user”能完整匹配,“user123”里的“123”会被自动过滤,甚至连“user_name”里的下划线也不会带进来,刚好符合“纯英文单词”的需求。

    但要是你处理的是Python代码里的变量名,可得记着Python变量名是允许用下划线的(比如“user_name”“data_list”这种都是合法的),这时候就得把正则改一改——加个下划线进去,变成[a-zA-Z_]。这么一改,下划线能被包含进来,数字还是进不去。我那朋友后来就用这招,把代码里的“user_name”“order_list”全提出来了,“user123”里的“123”直接被筛掉,统计出来的变量名清清爽爽。他后来还根据这些结果,给团队做了个“常用变量前缀表”,比如“user_”“data_”“order_”占比最高,领导看了都夸他“把隐藏的问题挖出来了”。

    你别说,这事儿还真挺有意思——正则这东西看着复杂,其实就是“用符号给字符画范围”,把你要的字符圈进去,不要的挡在外面,捅破这层纸就简单了。我那朋友后来跟我说,现在他提取变量名再也不发愁了,碰到类似的问题直接套这个思路,省了好多时间。


    怎么用正则提取Python代码里带标点的中文注释?

    可以用包含常用标点的正则范围,比如单行注释用#s([u4e00-u9fa5s:,。()]+),其中[u4e00-u9fa5s:,。()]覆盖了中文、空格和常见标点(如冒号、逗号、句号、括号);多行注释用”””([sS]?)”””,能匹配整段带换行和标点的注释内容。

    提取英文变量名时,怎么避免把数字算进去?

    如果要“纯英文”(不含数字和下划线),直接用[a-zA-Z]匹配大小写字母即可;如果是Python变量名(允许下划线),可以用[a-zA-Z_]——但要注意,这个正则不会包含数字,所以像user123里的“123”不会被匹配到。

    提取日志里的数字时,怎么过滤掉“123.45.67”这种无效数值?

    用d+(.d+)?就能解决:d+匹配整数部分,(.d+)?表示“最多一个小数点加数字”,这样既能匹配有效整数(如200)或浮点数(如123.45),又会自动过滤掉多小数点的无效数值(如123.45.67)。

    提取多行注释时,怎么避免匹配到后面的”””?

    关键是用“非贪婪匹配”,比如正则写”””([sS]?)”””——?表示“尽可能少匹配字符”,这样会在遇到第一个”””时就停止,不会错误匹配到后面的注释 符号。

    原文链接:https://www.mayiym.com/46677.html,转载请注明出处。
    0
    显示验证码
    没有账号?注册  忘记密码?

    社交账号快速登录

    微信扫一扫关注
    如已关注,请回复“登录”二字获取验证码