如何用正则表达式匹配正负整数,排除连字符连接的数字?
正则匹配需求:匹配独立正负整数,排除连字符连接的数字
示例文本
From 2020-2022, the frequency of COVID-19 increased when the temperature fell between 10 and -10 degrees. (2)
期望匹配结果
需要匹配:10、-10、2
需排除:-2022、-19、2020(注:排除2020这类年份超出正则表达式能力范围,无法实现)
已尝试的正则及问题
\b-?\d+\b:会误匹配所有数字,因为-是非单词字符,连字符连接的数字也会被命中\B-\d+\b:仅能匹配负数,无法匹配正整数- 数字可能出现在括号等符号中,不能仅用空格作为边界判断
(\B-|(?<!\w-)\b)\d+\b:理论可行,但所用正则引擎不支持负向后视语法
可行解决方案(无需负向后视)
使用以下正则表达式:
(\B-|(?:^|[^\w-])\b)\d+\b
正则解释
\B-:匹配非单词边界后的-,确保这个-不是连接符(比如2020-2022中的-前是数字,属于单词边界,不会被匹配)(?:^|[^\w-])\b:匹配字符串开头,或非单词字符、非连字符后的单词边界,确保正整数的前面没有连字符或字母数字\d+\b:匹配连续数字及后续的单词边界,避免数字后紧跟字母或连字符
内容的提问来源于stack exchange,提问作者Webb Myers
相关产品推荐
相关产品推荐

