如何用正则表达式(\.\s)拆分长字符串,忽略大写字母/数字后的匹配
正则拆分字符串:排除数字/大写字母后的点空格
原始字符串
Hello. Hello.bye. 125. 000. 182.000. U. S. A.
当前拆分方式及问题
使用正则 "\.\s" 拆分后得到以下结果:
Hello Hello.bye 125 000 182.000 U S A
但需要满足当.\s前为数字或大写字母时不拆分,期望拆分结果为:
Hello Hello.bye 125. 000 182.000 U. S. A.
错误尝试分析
你之前用的正则 (?(?<!([A-Z]|[0-9]))(\.\s)) 语法有误:(?(condition)yes|no) 是正则的条件分支结构,不是用来单纯匹配符合断言的分隔符的写法,所以无法生效。
正确正则表达式
直接使用负向后行断言来限定匹配规则,正确的拆分正则为:
(?<![A-Z0-9])\.\s
原理说明
(?<![A-Z0-9]):负向后行断言,确保当前位置的前一个字符不是大写字母(A-Z)或数字(0-9)\.\s:匹配点号加空格的组合
这样拆分时,只会把那些前面不是数字/大写字母的.\s作为分隔符,保留数字、大写字母后的点空格,得到你想要的结果。
内容的提问来源于stack exchange,提问作者Harsh Vardhan
相关产品推荐
相关产品推荐

