.NET正则表达式按最后下划线分割失效(无空格文本异常)
解决基于最后一个下划线分割文本的正则异常问题
问题出在哪
你用的正则^(.*?)_(\w+?)*$有俩关键问题:
.*?是非贪婪匹配,会尽量少匹配字符,碰到第一个下划线就停了,根本没定位到最后一个下划线(\w+?)*写法既冗余又不准,\w包含字母、数字和下划线,碰到无空格的行(比如DA04_Floorplan),会错误把中间的下划线当成分割点,导致匹配乱套
怎么改
用贪婪匹配直接定位最后一个下划线,同时精准抓末尾的单个字母,推荐用这个正则:
^(.*)_(.)$
简单解释
^和$分别卡每行的开头和结尾.*是贪婪匹配,会尽可能多的匹配字符,直到碰到最后一个下划线才停下,刚好匹配到分割点之前的所有内容_就是要找的最后那个下划线(.)抓下划线后面的单个字符(对应你示例里的C/E这些结尾字母)
要是想更严谨,限定结尾必须是大写字母,就改成:
^(.*)_([A-Z])$
测试效果
用这个正则跑你的文本,所有行都能正确分割:
2022-366_DA00_Cover Sheet==C 2022-366_DA01_Locality Plan==E 2022-366_DA02_Site Plan==H 2022-366_DA03_Delivery Plan==E 2022-366_DA04_Floorplan==D 2022-366_DA05_Roof Plan==D 2022-366_DA06_Front Side Building Elevations==F 2022-366_DA07_Drivethru Rear Building Elevations==D 2022-366_DA08_External Finishes Schedule==A
内容的提问来源于stack exchange,提问作者RobG
相关产品推荐
相关产品推荐

