如何编写正则匹配下划线一侧且前后无字母数字的N/D/S字符
调整后可用的正则表达式
r"(_[NDS](?![a-zA-Z0-9]))|((?<![a-zA-Z0-9])[NDS]_)"
原正则的问题
你原来的写法中使用了(?=[^a-zA-Z0-9])正向肯定预查,要求当前位置后方必须存在一个非字母数字的实体字符,无法适配字符串开头、结尾这类没有后续/前置字符的边界场景,因此匹配不到第一个字符串结尾的_N和第二个字符串开头的S_。
匹配逻辑说明
调整后的正则用否定预查替代了原来的肯定预查:
- 匹配
_[NDS]结构时,用(?![a-zA-Z0-9])校验N/D/S的后方不存在字母数字,同时兼容字符串结尾的场景 - 匹配
[NDS]_结构时,用(?<![a-zA-Z0-9])校验N/D/S的前方不存在字母数字,同时兼容字符串开头的场景 - 可以完全命中你需要的三个匹配项:第一个字符串的
_N、第二个字符串的S_和_D
内容的提问来源于stack exchange,提问作者Abdullah Raihan Bhuiyan
相关产品推荐
相关产品推荐

