如何编写正则匹配Mr开头且后续不只有独立数字的字符串
正则匹配需求:过滤Mr后仅跟独立数字的字符串
问题场景
待匹配的字符串示例如下:
Mr 1 Mr Ace The 3rd Mr James 2 Mr 299 Mr Seth
所有字符串均以Mr开头,需要匹配Mr后不是仅由独立数字组成的字符串,目标匹配结果为:
Mr Ace the 3rd Mr James 2 Mr Seth
需要排除的不符合要求的字符串如下(Mr后仅跟独立数字):
Mr 1 Mr 299
原有方案问题
你尝试的正则^(Mr\s)(.*\D)$无法匹配Mr James 2,是因为该正则要求字符串末尾必须是非数字字符,Mr James 2结尾为数字,所以命中失败。
正确实现方案
使用负向先行预查实现需求,推荐正则:
^Mr\s(?!\d+$).*$
正则逻辑说明:
^匹配字符串起始位置Mr\s匹配固定前缀Mr加一个空格(?!\d+$)负向预查规则:当前位置往后到字符串结尾的内容不能全为数字,刚好排除Mr后仅跟独立数字的场景.*$匹配剩余所有内容直到字符串结尾
该正则可以正确命中所有符合要求的字符串,同时排除掉需要忽略的内容。
内容的提问来源于stack exchange,提问作者Maxxx
相关产品推荐
相关产品推荐

