Notepad++:如何查找连续两个含任意小数部分的实数?
解决ATOM行中连续23开头数值的正则匹配问题
嘿,我懂你的困扰——你想从这行ATOM数据里精准匹配连续的两个以23开头的数值:
ATOM 41108 ZN1 ION 1 23.520 23.143 -1.003 1.00 0.00 O1
你之前用的23\d*\s*23没命中,问题出在正则没覆盖到数值里的小数点和小数部分,我来一步步帮你修正:
问题根源分析
你的正则23\d*\s*23逻辑是:匹配23 + 任意数字 + 任意空格 + 23,但实际目标数值是23.520和23.143,里面的.是正则的通配符,而且\d*只能匹配数字,完全忽略了小数点和后面的小数位,导致正则在遇到.时就中断了,根本没法定位到后面的第二个23。
正确的正则表达式
根据你的需求,我推荐两个版本:
1. 精准匹配带小数的23开头数值(适配你的示例)
23\.\d+\s+23\.\d+
拆解一下各部分的作用:
23\.:匹配23.,这里\.是转义后的小数点(避免被当作通配符)\d+:匹配至少一位小数(确保数值是带小数的格式)\s+:匹配两个数值之间的至少一个空格(比*更严谨,避免匹配空空格的情况)
用这个正则匹配你的目标行,会精准命中23.520 23.143。
2. 更灵活的版本(允许23开头的整数或小数)
如果你的数据里可能出现23 23.123或者23.456 23这类情况,可以用这个:
23(?:\.\d+)?\s+23(?:\.\d+)?
(?:\.\d+)?:非捕获组,匹配“小数点+至少一位小数”的结构,?表示这个结构是可选的(即允许整数形式的23)
测试验证
把上述正则应用到你的目标行上,都能准确匹配到你需要的连续23开头的数值段,解决之前的匹配失败问题。
内容的提问来源于stack exchange,提问作者Ahmad
相关产品推荐
相关产品推荐

